我需要在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");
}
两者都不奏效。
问题:
当我触发元素点击时如何获得回调函数?
答案 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)
您需要使用bind
或on
来添加回调。在你的情况下,它应该是这样的:
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!");
});
答案 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()
回调。