2011-10-03 11 views

Odpowiedz

22

Użyj właściwości which obiektu zdarzenia. Powinno być undefined zdarzeń wyzwalanych kodowych:

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

Oto working example z powyższych.

Aktualizacja na podstawie uwag

naciśnięcie klawisza Enter, gdy element input ma ostrość może wywołać zdarzenie click. Jeśli chcesz rozróżnić kliknięcia uruchamiane kodem i wszystkie inne kliknięcia (wyzwolenie za pomocą myszy lub klawiatury), powyższa metoda powinna działać poprawnie.

+1

'który' może wykryć aktywność klawiatury ale OP chce tylko aktywność myszy – diEcho

+3

Jak można kliknąć element klawiatury? –

+1

Nigdy nie naciskałeś Enter, aby się zalogować? – awm

12

Należy sprawdzić e.originalEvent:

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

** Demo na żywo: ** http://jsfiddle.net/frw8j/3/ –

+0

To wydaje się odróżniać triggerHandler od nie, ale kiedy po prostu zrobiłem: $ ("# someElem") [0] .click() To było traktowane jako prawdziwe "kliknięcie". –

1

czekać na jakiś czas i używać event.isTrusted - jego wspierany przez IE9, Opera 12, a Firefox Nightly. Webkit również będzie go wspierać.

Obecnie nie ma zagwarantowanej metody.

+2

Nie zgadzam się: e.originalEvent robi sztuczkę –

+0

nie chcę łamać twoich różowych okularów, ale jQuery nie jest magiczną różdżką ... – c69

Powiązane problemy