Tengo un controlador adjunto a un evento y me gustaría que se ejecute solo si es activado por un humano, y no por un método trigger (). ¿Cómo noto la diferencia?
Por ejemplo,
$('.checkbox').change(function(e){
if (e.isHuman())
{
alert ('human');
}
});
$('.checkbox').trigger('change'); //doesn't alert
javascript
jquery
Dziamid
fuente
fuente
:)
event.isTrigger
originalEvent
cuando el evento se desencadenaDOM.click()
, pero puede usarlo$($("#try")[0]).click();
, que es torpe, pero funciona.Más sencillo que el anterior sería:
fuente
isTrigger
en la API pública a partir de este momento .Creo que la única forma de hacerlo sería pasar un parámetro adicional en la
trigger
llamada según la documentación .Ejemplo: http://jsfiddle.net/wG2KY/
fuente
La respuesta aceptada no funcionó para mí. Han pasado 6 años y jQuery ha cambiado mucho desde entonces.
Por ejemplo,
event.originalEvent
siempre regresatrue
con jQuery 1.9.x. Quiero decir que el objeto siempre existe pero el contenido es diferente.Aquellos que usan versiones más nuevas de jQuery pueden probar esta. Funciona en Chrome, Edge, IE, Opera, FF
fuente
Actualmente la mayoría de los navegadores soportan event.isTrusted :
De documentos :
fuente
Puede usar onmousedown para detectar el clic del mouse frente a la llamada trigger ().
fuente
Pensaría en una posibilidad en la que verifique la posición del mouse, como:
fuente
En caso de que tenga control de todo su código, no hay llamadas extraterrestres
$(input).focus()
quesetFocus()
.Usar una variable global es una forma correcta para mí.
Si algún extraterrestre todavía quiere llamar
$(input).focus()
desde otro planeta. Buena suerte o mira otras respuestasfuente
setFocus()
, no evita que las personas activen el evento de enfoque. No escribirsetFocus()
en absoluto también evitaría que las personas lo llamen, así que no veo el beneficio. De hecho, la gente aún podría llamar$('input').focus()
y hacer que pasara.(function(){/*your code here*/})();
Esto mantendría la función setFocus a salvo de ser invocada y el booleano de ser modificado por scripts externos.