如何在jQuery触发器上运行回调函数(“click”)?
我需要在trigger
调用的回调中触发自定义事件,但我无法使其工作。如何在jQuery触发器上运行回调函数(“click”)?
我尝试这样做:
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");
}
这两者都不工作。
问:
如何获得的回调函数,当我触发元素上点击运行?
当您拨打trigger
时,绑定事件处理程序会立即执行,因此您不需要任何回调。只需使用
$input.trigger('click');
runtests();
+1这应该工作正常,根据文档:http://qunitjs.com/cookbook/#testing-user-actions。 – 2013-03-20 09:24:48
要走的路。谢谢 – frequent 2013-03-20 09:28:48
@频繁发生,当然,你会遇到回调和处理程序混淆。如果没有与动作相关的异步活动,那么它就是您*触发的处理程序*,而如果存在异步活动,则分配一个*回调*来处理响应发生时(或状态)的响应。 – 2013-03-20 17:19:14
触发器没有回调函数。
.trigger(eventType [, extraParameters ])
你能做什么
var $input = $(".ui-popup-container").find("input").eq(2);
$input.on('click',function(){
console.log("clicked the input");
});
@dystroy对不起,我正在编辑我的答案... – 2013-03-20 09:22:29
好的。感谢澄清。 – frequent 2013-03-20 09:24:21
您需要使用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()
手动触发它。
如果你对每输入一个单击处理程序,但希望做一些特定的元素:
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');
是 - 这是事实,触发并不需要回调,但我们可以传递回调作为参数。
//.trigger(eventType [, extraParameters ])
$("#element").bind("customCall", function(e, callback){
callback();
}
var callback = function(){alert("Hello");}
$("#element").trigger("customCall",[callback]);
希望这将有助于
如果您已经熟悉为DOM元素定义绑定事件时分配回调函数的约定,此答案实际上告诉您如何实际传递动态回调函数当事件被触发时。这使得它成为本页最有价值的答案之一。 – tobylaroni 2016-06-01 04:58:29
同意@tobylaroni。不知道为什么这不是公认的答案!可能这个问题是特定于'触发'而不是自定义的呼叫。 – Rahatur 2018-03-02 09:06:13
你为什么要添加未定义的第二个参数触发?第二个参数应该做什么?你困惑触发和绑定? – 2013-03-20 09:16:11
这是我在回调函数中的尝试...我也尝试按[jquery API](http://api.jquery.com/trigger/)在'[]'中包装它,但也不起作用 – frequent 2013-03-20 09:17:31
'.trigger'不接受任何回调。 $ input.trigger('click')'触发'$ input'元素上的'click'事件,即它将执行绑定到这些元素的'click'事件处理程序。看起来你已经将'runtest'绑定到'$ input',但我不确定你想要的是什么。 – 2013-03-20 09:17:47