2011-10-03 27 views

Respuesta

22

Utilice la propiedad which del objeto de evento. Debe ser undefined para eventos iniciados en código:

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

Aquí hay una working example de los anteriores.

actualización basado en los comentarios

pulsando la tecla Intro cuando un elemento tiene el foco input puede desencadenar el evento click. Si desea distinguir entre los clics disparados por el código y todos los demás clics (el mouse o el teclado se activan), el método anterior debería funcionar bien.

+1

'which' puede detectar la actividad del teclado pero OP solo desea la actividad del mouse – diEcho

+3

¿Cómo se puede hacer clic en un elemento con el teclado? –

+1

¿Nunca presionó enter para iniciar sesión? – awm

12

Debe comprobar e.originalEvent:

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

** Demostración en directo: ** http://jsfiddle.net/frw8j/3/ –

+0

Eso parece diferenciar entre triggerHandler no, pero cuando acabo de hacer: $ ("# someElem") [0] .click() Se trató como un "clic" real. –

1

esperar algún tiempo y utilizar event.isTrusted - su apoyo de IE9, Opera 12, y Firefox Nightly. Webkit lo apoyará también, muy probablemente.

Actualmente, no hay forma garantizada de saberlo.

+2

No estoy de acuerdo: e.originalEvent hace el truco –

+0

no quieren romper sus gafas de color rosa, pero jQuery no es una varita mágica ... – c69

Cuestiones relacionadas