如何在jQuery触发器上运行回调函数("click")?

fre*_*ent 28 javascript jquery events triggers callback

我需要在回调中触发一个自定义事件trigger,但我无法让它工作.

我试过这个:

var $input = $( ".ui-popup-container" ).find( "input" ).eq(2);

function runtests () {
    console.log("clicked the input");
};
$input.trigger('click', runtests()); 
Run Code Online (Sandbox Code Playgroud)

还有这个:

var $input = $( ".ui-popup-container" ).find( "input" ).eq(2);
$input.trigger('click', function(){
    console.log("clicked the input");
}
Run Code Online (Sandbox Code Playgroud)

两者都不奏效.

问题:
如何在触发元素单击时运行回调函数?

Den*_*ret 25

调用时trigger,绑定事件处理程序会立即执行,因此您不需要任何回调.只是用

$input.trigger('click');
runtests();
Run Code Online (Sandbox Code Playgroud)

  • 这对我不起作用.我得到一个竞争条件,除非我在示例中的runtests()函数上使用setTimeout. (8认同)
  • @frequent,当然,你得到的回调和处理程序混淆了.如果没有与该操作关联的异步活动,则它是您*触发*的处理程序,而如果存在异步活动,则指定*回调*以在其发生时(或通过状态)处理它的响应. (2认同)

小智 19

是的 - 触发器不接受回调,但我们可以将回调作为参数传递.

//.trigger( eventType [, extraParameters ] )

$("#element").bind("customCall", function(e, callback){
   callback();
}
var callback = function(){alert("Hello");}
$("#element").trigger("customCall",[callback]);
Run Code Online (Sandbox Code Playgroud)

希望这会有所帮助

  • 如果您已经熟悉在为DOM元素定义绑定事件时分配回调函数的约定,那么这个答案实际上告诉您如何在触发事件时实际传递动态回调函数.这对我来说是本页最有价值的答案之一. (4认同)

Mah*_*kal 11

首先,您需要绑定click事件,然后才能触发click事件.

$input.bind('click', function() {

     console.log("clicked the input");
});

$input.trigger('click');
Run Code Online (Sandbox Code Playgroud)

  • 使用`.on()`而不是`.bind()`. (4认同)

Dip*_*mar 5

触发器没有回调函数.

.trigger( eventType [, extraParameters ] )
Run Code Online (Sandbox Code Playgroud)

Official Document

你可以做什么

var $input = $( ".ui-popup-container" ).find( "input" ).eq(2);

$input.on('click',function(){
   console.log("clicked the input");
});
Run Code Online (Sandbox Code Playgroud)