Necesito activar un evento personalizado en la devolución de llamada de un trigger
llame, pero no puedo hacer que funcione.
Intenté esto:
var $input = $( ".ui-popup-container" ).find( "input" ).eq(2);
function runtests () {
console.log("clicked the input");
};
$input.trigger('click', runtests());
y esto:
var $input = $( ".ui-popup-container" ).find( "input" ).eq(2);
$input.trigger('click', function(){
console.log("clicked the input");
}
Ninguno de los cuales funciona.
Pregunta:
¿Cómo hago para que se ejecute una función de devolución de llamada cuando hago clic en un elemento?
Denys Séguret
Cuando usted llama trigger
, el controlador de eventos vinculado se ejecuta inmediatamente, por lo que no necesita ninguna devolución de llamada. Solo usa
$input.trigger('click');
runtests();
-
+1 Eso debería funcionar bien, según los documentos: qunitjs.com/cookbook/#testing-user-actions.
– Félix Kling
20 de marzo de 2013 a las 9:24
-
@frequent, estaba confundiendo las devoluciones de llamada y los controladores, por supuesto. Si no hay actividad asíncrona asociada con la acción, es un controlador que usted generarmientras que si hay actividad asincrónica, asigna un llamar de vuelta para manejar su respuesta cuando ocurre (o por estado).
– Jared Farrish
20 de marzo de 2013 a las 17:19
-
Esto no funciona para mi. Obtengo una condición de carrera a menos que use setTimeout en la función runtests() en el ejemplo.
– usuario460114
10 de junio de 2014 a las 11:52
-
esto no funciona cuando tiene un código js largo en la segunda parte del código y al final de una llamada ajax. única solución que es fea pero settimeout parece funcionar
– vknyvz
11 de enero de 2016 a las 18:56
Sí, es cierto que el activador no acepta la devolución de llamada, pero podemos pasar la devolución de llamada como parámetro.
//.trigger( eventType [, extraParameters ] )
$("#element").bind("customCall", function(e, callback){
callback();
}
var callback = function(){alert("Hello");}
$("#element").trigger("customCall",[callback]);
Espero que esto ayude
-
Si ya está familiarizado con la convención para asignar funciones de devolución de llamada al definir un evento vinculado para un elemento DOM, esta respuesta realmente le dice cómo podría pasar una función de devolución de llamada dinámica en el momento en que se activa el evento. Eso la convierte en una de las respuestas más valiosas en esta página, para mí.
– tobylaroni
1 de junio de 2016 a las 4:58
-
De acuerdo con @tobylaroni. ¡No estoy seguro de por qué esta no fue la respuesta aceptada! Probablemente la pregunta era específica para ‘activar’ que una llamada personalizada.
– Rahatur
2 de marzo de 2018 a las 9:06
-
Leer más sobre
.trigger( eventType [, extraParameters ] )
.–Rohit Sharma
27 de julio de 2018 a las 9:56
msapkal
Primero debe vincular el evento de clic y luego puede activar el evento de clic.
$input.bind('click', function() {
console.log("clicked the input");
});
$input.trigger('click');
-
sí. esa es una manera Gracias.
– frecuente
20 de marzo de 2013 a las 9:23
-
Usar
.on()
en vez de.bind()
.– Simón
20 de marzo de 2013 a las 9:47
-
la pregunta es sobre
$input.trigger('click', function(){//code when the click function has been completed})
;–Rohit Sharma
27 de julio de 2018 a las 8:35
Trigger no tiene función de devolución de llamada.
.trigger( eventType [, extraParameters ] )
Lo que puedes hacer
var $input = $( ".ui-popup-container" ).find( "input" ).eq(2);
$input.on('click',function(){
console.log("clicked the input");
});
necesitas usar bind
o on
para agregar devoluciones de llamada. En tu caso debería verse así:
var $input = $( ".ui-popup-container" ).find( "input" ).eq(2);
function runtests () {
console.log("clicked the input");
};
$input.bind('click', runtests);
Una versión aún más corta para hacer clic en enlace es $input.click(runtests)
Luego se llamará al hacer clic o puede activarlo manualmente con $input.trigger('click')
o simplemente $input.click()
.
marcok
El disparador no tiene una función de devolución de llamada; es mejor que vuelva a escribir su código para usar el .en método.
$("body").on("click", "#click", function() {
alert("Clicked!");
});
Si tiene un controlador de clics en cada entrada pero desea hacer algo en un elemento específico:
var $container = $(".ui-popup-container"),
special = 2;
$container.on('click', 'input', function() {
// do something for every input
if($(this).index() == special) {
// your "callback", e.g. the function you want to execute on input:eq2 click
myfunction();
}
}).find('input').eq(special).trigger('click');
¿Por qué está agregando undefined como segundo parámetro para activar? ¿Qué se supone que debe hacer ese segundo parámetro? ¿Estás confundiendo trigger y bind?
– Denys Séguret
20 de marzo de 2013 a las 9:16
Ese es mi intento de una función de devolución de llamada… También intenté envolverlo en
[]
según API jquerypero tampoco funciona– frecuente
20 de marzo de 2013 a las 9:17
.trigger
no acepta ninguna devolución de llamada.$input.trigger('click')
desencadena elclick
evento en el$input
elementos, es decir, ejecutará elclick
controladores de eventos vinculados a esos elementos. Parece que te has atadoruntest
a$input
pero no estoy seguro de lo que quieres exactamente.– Félix Kling
20 de marzo de 2013 a las 9:17
Pero, ¿cómo se supone que se debe usar esta devolución de llamada?
– Denys Séguret
20 de marzo de 2013 a las 9:17
@FelixKling: necesito hacer clic en la entrada y después de que haya ejecutado sus propios controladores, necesito ejecutar un conjunto de pruebas qunit (para verificar si la entrada hizo lo que debería)
– frecuente
20 de marzo de 2013 a las 9:18