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

时间:2013-03-20 09:14:50

标签: 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()); 

和此:

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

两者都不奏效。

问题:
当我触发元素点击时如何获得回调函数?

8 个答案:

答案 0 :(得分:23)

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

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

答案 1 :(得分:17)

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

//.trigger( eventType [, extraParameters ] )

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

希望这会有所帮助

答案 2 :(得分:11)

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

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

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

$input.trigger('click');

答案 3 :(得分:5)

触发器没有回调功能。

.trigger( eventType [, extraParameters ] )

<强> Official Document

你能做什么

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

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

答案 4 :(得分: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()手动触发它。

答案 5 :(得分:0)

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

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

JSFiddle

答案 6 :(得分: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');

答案 7 :(得分:0)

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

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

您将必须像这样使用setTimeout()

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

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