2011-10-03 38 views

Trả lời

22

Sử dụng thuộc tính which của đối tượng sự kiện. Nó phải là undefined cho các sự kiện mã kích hoạt:

$("#someElem").click(function(e) { 
    if(e.which) { 
     //Actually clicked 
    } 
    else { 
     //Triggered by code 
    } 
}); 

Dưới đây là một working example những điều trên.

Cập nhật dựa trên ý kiến ​​

Nhấn phím Enter khi một phần tử input có trọng tâm có thể kích hoạt các sự kiện click. Nếu bạn muốn phân biệt giữa các nhấp chuột được mã kích hoạt và tất cả các nhấp chuột khác (chuột hoặc bàn phím được kích hoạt) thì phương thức trên sẽ hoạt động tốt.

+1

'which' có thể phát hiện hoạt động bàn phím nhưng OP chỉ muốn hoạt động chuột – diEcho

+3

Làm cách nào để một phần tử được bàn phím bấm? –

+1

Bạn chưa bao giờ nhấn enter để đăng nhập? – awm

12

Bạn nên kiểm tra e.originalEvent:

$("#someElem").click(function(e) { 
    if(e.originalEvent === undefined) { 
     //triggered 
    } 
    else { 
     //clicked by user 
    } 
}); 
+0

** Live demo: ** http://jsfiddle.net/frw8j/3/ –

+0

Điều đó dường như phân biệt triggerHandler từ không, nhưng khi tôi vừa làm: $ ("# someElem") [0] .click() Nó được coi là "nhấp chuột" thực sự. –

1

Chờ một thời gian và sử dụng event.isTrusted - hỗ trợ của mình bằng IE9, Opera 12 và Firefox hàng đêm. Webkit cũng sẽ hỗ trợ nó, rất có thể.

Hiện tại, không có cách nào đảm bảo để biết.

+2

Tôi không đồng ý: e.originalEvent thực hiện thủ thuật –

+0

không muốn phá vỡ kính màu hồng của bạn, nhưng jQuery không phải là cây đũa thần ... – c69

Các vấn đề liên quan