2010-03-09 50 views

Trả lời

123

Như những người khác đã đề cập, nút chuột phải có thể được phát hiện through the usual mouse events (mousedown, mouseup, click). Tuy nhiên, nếu bạn đang tìm kiếm sự kiện kích hoạt khi trình đơn nhấp chuột phải được đưa lên, bạn đang tìm kiếm địa điểm sai. Menu chuột phải/ngữ cảnh cũng có thể truy cập thông qua bàn phím (shift + F10 hoặc phím menu ngữ cảnh trên Windows và một số Linux). Trong tình huống này, sự kiện mà bạn đang tìm kiếm là oncontextmenu:

window.oncontextmenu = function() 
{ 
    showCustomMenu(); 
    return false;  // cancel default menu 
} 

Đối với các sự kiện chuột tự, trình duyệt thiết lập một tài sản cho đối tượng sự kiện mà có thể truy cập từ sự kiện này chức năng xử lý:

document.body.onclick = function (e) { 
    var isRightMB; 
    e = e || window.event; 

    if ("which" in e) // Gecko (Firefox), WebKit (Safari/Chrome) & Opera 
     isRightMB = e.which == 3; 
    else if ("button" in e) // IE, Opera 
     isRightMB = e.button == 2; 

    alert("Right mouse button " + (isRightMB ? "" : " was not") + "clicked!"); 
} 

window.oncontextmenu - MDC

+5

Cũng giống như vấn đề/nút nào, 'oncontextmenu' không được thực hiện giống nhau trong tất cả các trình duyệt ... xem http://www.quirksmode.org/dom/events/contextmenu.html đối với một số 'gotchas' . – smencer

+2

@AndyE Hi Andy, biểu thức '(isRightMB?" Không phải là ":" ")' nên là '(isRightMB?"was": "không phải là") '. Đúng ? Xin vui lòng giúp đỡ để xem xét nó. –

+1

@ Joe: funny như thế nào mà đã đi lên 32 phiếu và 4 năm mà không ai nhận thấy ;-) Tôi nghĩ rằng tôi có thể được miễn, mặc dù - đó là 00:30 sáng khi tôi đã viết câu trả lời! –

1

Có - đúng vậy!

function doSomething(e) { 
    var rightclick; 
    if (!e) var e = window.event; 
    if (e.which) rightclick = (e.which == 3); 
    else if (e.button) rightclick = (e.button == 2); 
    alert('Rightclick: ' + rightclick); // true or false 
} 
+0

Về mặt kỹ thuật, nó không phải là "sự kiện" nhưng nó có thể được sử dụng. – ChickenMilkBomb

+1

Mã của bạn không hiển thị ở tất cả mọi người sẽ gọi như thế nào ... –

+0

@TimothyKhouri (và bất kỳ ai khác ở đây): đây là một chức năng nghe sự kiện tương thích. Bạn sẽ chuyển đối tượng hàm chính nó làm đối số thứ hai cho [addEventListener] (https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener), sau đó sẽ _call_ nó xuất hiện sự kiện được chỉ định. Ví dụ: 'elem.addEventListener (" click ", doSomething)' –

3

Không, nhưng bạn có thể phát hiện nút chuột nào được sử dụng trong sự kiện "onmousedown" ... và từ đó xác định xem đó có phải là "nhấp chuột phải" hay không.

+0

vì vậy, nhấp chuột phải có kích hoạt sự kiện onclick không? – Brian

+0

Bạn nói đúng, điều đó sẽ được thực hiện. –

+0

@Brian: nhấp chuột phải sẽ kích hoạt 'onmousedown',' onmouseup' và 'onclick'. Tuy nhiên, nếu bạn đang xem xét ghi đè trình đơn nhấp chuột phải, những sự kiện này không phải là những gì bạn nên sử dụng (xem câu trả lời của tôi bên dưới). –

-2

Vâng, đây là sự kiện có tên là javascript. Có một jQuery plugin quá để làm điều đó

19

có một cái nhìn vào mã jQuery sau:

$("#myId").mousedown(function(ev){ 
     if(ev.which == 3) 
     { 
      alert("Right mouse button clicked on element with id myId"); 
     } 
}); 

Giá trị của which sẽ là:

  • cho nút trái
  • cho nút giữa
  • cho nút phải
+2

Eeeew, thật khủng khiếp! Tại sao '.which' không giống với' .button'? O.o '.button' => * 0,1,2 *; 'which' => * 1,2,3 *. đó chỉ là sai. –

4

Ya, mặc dù w3c cho biết nhấp chuột phải có thể được phát hiện bởi sự kiện nhấp chuột, onClick không được kích hoạt thông qua nhấp chuột phải vào các trình duyệt thông thường.

Thực tế, nhấp chuột phải chỉ kích hoạt trênMouseDown trênMouseUp và onContextMenu.

Vì vậy, bạn có thể coi "onContextMenu" là sự kiện nhấp chuột phải. Đó là tiêu chuẩn HTML5.0.

+1

Có, âm thanh như một giải pháp tuyệt vời, đặc biệt nếu bạn đang nhắm mục tiêu các trình duyệt mới hơn. Tôi không nghĩ đây chỉ là HTML5.0, bởi vì ngay cả IE 5.5 cũng hỗ trợ nó trên các phần tử! Dưới đây là thông tin thêm về những trình duyệt hỗ trợ: http://www.quirksmode.org/dom/events/contextmenu.html – Ignas2526

0

Xử lý sự kiện sử dụng thư viện jQuery

$(window).on("contextmenu", function(e) 
{ 
    alert("Right click"); 
}) 
1

Vâng, oncontextmenu có lẽ là lựa chọn tốt nhất nhưng lưu ý rằng nó gây nên trên chuột xuống trong khi nhấp vào sẽ kích hoạt trên chuột lên.

Các câu hỏi liên quan khác đã hỏi về nhấp chuột phải - dường như không được hỗ trợ ngoại trừ kiểm tra hẹn giờ thủ công. Một lý do mà bạn có thể muốn có khả năng nhấp chuột phải là nếu bạn cần/muốn hỗ trợ đầu vào chuột trái (nút đảo ngược). Việc triển khai trình duyệt dường như tạo ra nhiều giả định về cách chúng ta nên sử dụng các thiết bị đầu vào có sẵn.

5

Câu trả lời của tôi là window.oncontextmenu, ví dụ:

window.oncontextmenu = function() { 
 
    alert('Right Click') 
 
}
<h1>Please Right Click here!</h1>

2

Các mã sau đây được sử dụng jQuery để tạo ra một sự kiện tùy chỉnh rightclick dựa trên mặc định mousedownmouseup sự kiện. Nó xem xét những điểm sau đây:

  • kích hoạt trên mouseup
  • kích hoạt chỉ khi ép mousedown trên cùng một nguyên tố trước
  • mã này đặc biệt cũng làm việc trong JFX Webview (kể từ khi sự kiện contextmenu không được kích hoạt ở đó)
  • nó không kích hoạt khi phím ContextMenu trên bàn phím được nhấn (như các giải pháp với on('contextmenu', ...) không

$(function() 
 
{ // global rightclick handler - trigger custom event "rightclick" 
 
\t var mouseDownElements = []; 
 
\t $(document).on('mousedown', '*', function(event) 
 
\t { 
 
\t \t if (event.which == 3) 
 
\t \t { 
 
\t \t \t mouseDownElements.push(this); 
 
\t \t } 
 
\t }); 
 
\t $(document).on('mouseup', '*', function(event) 
 
\t { 
 
\t \t if (event.which == 3 && mouseDownElements.indexOf(this) >= 0) 
 
\t \t { 
 
\t \t \t $(this).trigger('rightclick'); 
 
\t \t } 
 
\t }); 
 
\t $(document).on('mouseup', function() 
 
\t { 
 
\t \t mouseDownElements.length = 0; 
 
\t }); 
 
    // disable contextmenu 
 
    $(document).on('contextmenu', function(event) 
 
\t { 
 
\t \t event.preventDefault(); 
 
\t }); 
 
}); 
 

 

 

 
// Usage: 
 
$('#testButton').on('rightclick', function(event) 
 
{ 
 
    alert('this was a rightclick'); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<button id="testButton">Rightclick me</button>

0

Nếu bạn muốn gọi hàm khi sự kiện click chuột phải nghĩa là chúng ta có thể sử dụng sau

<html lang="en" oncontextmenu="func(); return false;"> 
</html> 

<script> 
function func(){ 
alert("Yes"); 
} 
</script> 
-1

Để xử lý click chuột phải từ chuột, bạn có thể sử dụng các sự kiện 'oncontextmenu'. Dưới đây là ví dụ:

document.body.oncontextmenu=function(event) { 
    alert(" Right click! "); 
}; 

mã trên sẽ cảnh báo một số văn bản khi nhấn chuột phải được nhấn. Nếu bạn không muốn trình đơn mặc định của trình duyệt xuất hiện, bạn có thể thêm trả về false; Khi kết thúc nội dung của hàm. Cảm ơn.

+0

Thay vì chỉ phản hồi bằng câu trả lời quảng bá một số khung, câu trả lời của bạn sẽ hữu ích hơn nếu nó chứa một vani giải pháp, và sau đó có lẽ được xây dựng trên nó để mô tả làm thế nào nó có thể được dễ dàng hơn để sử dụng khuôn khổ của bạn là tốt. – Xaniff

+0

Ok ... Cảm ơn bạn đã giới thiệu .. Nó thực sự rất dễ dàng với vanilA js quá –

0

Cách dễ nhất để có được click chuột phải thực hiện là sử dụng

$('classx').on('contextmenu', function (event) { 

}); 

Tuy nhiên đây không phải là giải pháp trình duyệt chéo, trình duyệt hành xử khác nhau cho sự kiện này đặc biệt firefox và IE. Tôi sẽ giới thiệu bên dưới cho giải pháp trình duyệt chéo

$('classx').on('mousedown', function (event) { 
    var keycode = (event.keyCode ? event.keyCode : event.which); 
    if (keycode === 3) { 
     //your right click code goes here  
    } 
}); 
Các vấn đề liên quan