我想知道是否有人知道使用参数调用其内部的实时事件。
$('#mybutton').live('click', {param: param1), function(event) {
alert(event.data.param);
$('#mybutton').click('some data');
});
我在代码中发现了一些奇怪的东西,导致触发事件无效。
这是一个应该有效的干净版本。
$('#mybutton').live('click', {param: param1), function(event) {
alert(event.data.param);
$('#mybutton').trigger('click', ['some data']);
});
答案 0 :(得分:2)
我相信trigger
可让您指定其他参数。它们将显示为函数的额外参数而不是event.data
对象上的项,但它们将到达那里......
以下是一个示例(live copy):
jQuery(function($) {
$("#theButton").live('click', {foo: "bar"}, function(event, second) {
display("event.data.foo = " + event.data.foo);
display("second arg = " + second);
});
$("#theTrigger").click(function() {
$("#theButton").trigger('click', "charlie");
});
function display(msg) {
$("<p>").html(msg).appendTo(document.body);
}
});
但是想以这种方式触发事件处理程序通常表明事情需要一些重构。有一个功能可以完成你想要完成的工作,然后当你想要完成工作时调用那个功能 - 要么响应一个事件,要么直接当你需要直接完成工作时(而不是触发事件,这是间接的,从维护角度来看并不十分清楚。)
E.g:
$('#mybutton').live('click', {param: param1), function(event) {
doSomething(event.data.param);
});
function doSomething(param) {
// ...do something with `param`...
// Possibly call yourself again
if (some_condition) {
doSomething(some_other_param_value);
}
}
答案 1 :(得分:0)
你很接近,但我认为你的live
代码有点不对:
$('#mybutton').live('click', function(event, param) {
alert(param);
$('#mybutton').trigger('click', ['some data']);
});
此外,
$('#mybutton').trigger('click', 'some data');
仅与jQuery 1.6.2兼容。将其包装在数组中
$('#mybutton').trigger('click', ['some data']);
更向后兼容。