如何从内部调用jQuery live事件?

时间:2011-07-13 10:33:38

标签: jquery

我想知道是否有人知道使用参数调用其内部的实时事件。

$('#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']);
});

2 个答案:

答案 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']);

更向后兼容。