Digamos que tengo un controlador de clic definido:
$("#foo").click(function(e){
});
¿Cómo puedo, dentro del controlador de funciones, saber si el evento fue activado mediante programación o por el usuario?
Digamos que tengo un controlador de clic definido:
$("#foo").click(function(e){
});
¿Cómo puedo, dentro del controlador de funciones, saber si el evento fue activado mediante programación o por el usuario?
$x.click()o $x.trigger('click').
Respuestas:
Podrías echar un vistazo al objeto de evento e. Si el evento se desencadena por una verdadera clic, usted tendrá cosas como clientX, clientY, pageX, pageY, etc. dentro ey serán números; Estos números están relacionados con la posición del mouse cuando se activa el clic, pero probablemente estarán presentes incluso si el clic se inició a través del teclado. Si el evento fue activado por, $x.click()entonces no tendrá los valores de posición habituales en e. También puede mirar la originalEventpropiedad , que no debería estar allí si el evento vino $x.click().
Quizás algo como esto:
$("#foo").click(function(e){
if(e.hasOwnProperty('originalEvent'))
// Probably a real click.
else
// Probably a fake click.
});
Y aquí hay una pequeña caja de arena para jugar: http://jsfiddle.net/UtzND/
originalEvent? ¿Es el tipo de cosas correcto? ¿Hay coordenadas en alguna parte? ¿Son coherentes las coordenadas? ¿Están las coordenadas adentro #foo? ...
Puede utilizar un parámetro adicional como se indica en el manual de activación de jQuery :
$("#foo").click(function(e, from){
if (from == null)
from = 'User';
// rest of your code
});
$('#foo').trigger('click', ['Trigger']);
$x.click()la .click()persona que llama tiene que decirle explícitamente que está fingiendo. Esto puede o no ser un problema dependiendo de lo que esté haciendo Kevin Owocki.
$x.click()cuál es el manejador de eventos (para el clic del usuario, que puede ser "normal")
Ya hay otra pregunta respondida.
¿Cómo detectar si un clic () es un clic del mouse o se activa por algún código?
Utilice la whichpropiedad del objeto de evento. Debería ser undefinedpara eventos activados por código
$("#someElem").click(function(e) {
if (e.which) {
// Actually clicked
} else {
// Triggered by code
}
});
Ejemplo de JsFiddle - http://jsfiddle.net/interdream/frw8j/
¡Espero eso ayude!
select, daría un e.which==undefinedpar por un evento genuino.
He probado todas las soluciones anteriores, pero en mi caso no ha funcionado nada. La siguiente solución funcionó para mí. Espero que también te ayude.
$(document).ready(function(){
//calling click event programmatically
$("#chk1").trigger("click");
});
$(document).on('click','input[type=checkbox]',function(e) {
if(e.originalEvent.isTrusted==true){
alert("human click");
}
else{
alert("programmatically click");
}
});
<script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.3.1.min.js">
</script>
<input type="checkbox" id="chk1" name="chk1" >Chk1</input>
<input type="checkbox" id="chk2" name="chk2" >Chk2</input>
<input type="checkbox" id="chk3" name="chk3" >Chk3</input>
DOM Nivel 3 especifica event.isTrusted. Esto solo se admite actualmente en IE9 + y Firefox (según mis pruebas. También he leído (aunque no he investigado a fondo) que se puede anular en algunos navegadores y probablemente aún no esté 100% listo para ser realmente confiable (desafortunadamente).
Esta es una versión modificada del violín de @ mu que funciona en IE y Firefox.
isTrustedes compatible y no se puede escribir. Creo que la respuesta real depende del por qué detrás de esta pregunta y nunca supimos por qué.
No voy a participar en la discusión intelectual, el código que me funcionó para filtrar .click()y .trigger('click')es-
$(document).on('click touchstart', '#my_target', function(e) {
if (e.pageX && e.pageY) { // To check if it is not triggered by .click() or .trigger('click')
//Then code goes here
}
});