32

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

我试过这个:

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

function runtests () {
    console.log("clicked the input");
};
$input.trigger('click', runtests()); 

还有这个:

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

两者都不起作用。

问题:
当我触发对元素的点击时,如何让回调函数运行?

4

10 回答 10

28

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

$input.trigger('click');
runtests();
于 2013-03-20T09:21:03.643 回答
25

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

//.trigger( eventType [, extraParameters ] )

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

希望这会有所帮助

于 2015-12-18T03:27:44.767 回答
12

首先需要绑定点击事件,然后才能触发点击事件。

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

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

$input.trigger('click');
于 2013-03-20T09:20:28.880 回答
5

触发器没有回调函数。

.trigger( eventType [, extraParameters ] )

Official Document

你可以做什么

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

$input.on('click',function(){
   console.log("clicked the input");
});
于 2013-03-20T09:18:48.170 回答
2

您需要使用bindon添加回调。在您的情况下,它应该如下所示:

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

function runtests () {
    console.log("clicked the input");
};

$input.bind('click', runtests);

绑定点击的更短版本是$input.click(runtests)

然后它将在单击时调用,或者您可以使用$input.trigger('click')或简单地手动触发它$input.click()

于 2013-03-20T09:20:44.807 回答
0

触发器没有回调函数 - 您可以更好地重写代码以使用.on方法。

$("body").on("click", "#click", function() {
   alert("Clicked!"); 
});

JSF中。

于 2013-03-20T09:20:26.890 回答
0

如果您对每个输入都有一个单击处理程序,但想对特定元素执行某些操作:

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');
于 2013-03-20T09:44:56.040 回答
0

.trigger()不接受任何回调。大多数情况下您不需要它,因为绑定的事件处理程序会立即执行。但是,如果您在触发事件处理程序中有 AJAX 调用,则接受答案的代码将不起作用:

$input.trigger('click');
runtests();

您将不得不setTimeout()像这样使用:

$input.trigger('click');
setTimeout(function () {
    runtests();
}, 250);

或者考虑在事件处理程序中使用successerror回调.ajax()调用。.trigger()

于 2020-04-02T18:58:34.263 回答
0

Denys Séguret 的逻辑是正确的。但是当触发函数之后需要回调函数时, $.when 是可用的:

$.when($input.trigger("click"))
 .done(function () { runtests(); });
于 2021-09-19T18:20:17.043 回答
0

请试试这个:

$('#inputTxt1').change(function(e, callback1, data) {

    /*  other statement ...   */  
    
   if(typeof(callback1)==='function'){
       callback1(data);
   } 
});

$('#button2').click(function(e){
    $('#button1').trigger('change', [secondCallback, 'data to callback']);
});

function secondCallback(data){
    var result = data;
} 
于 2021-10-28T20:55:23.713 回答