如何在jQuery中使用.live绑定多个事件?

时间:2011-09-29 11:32:38

标签: javascript jquery html ajax dom

我有一个包含两个事件的输入文本,而且我会多次克隆它。要正确绑定这些元素,我使用:

注意:此输入文字包含focusin和focusout事件。

$('[selector_input]').die().live( 'focusin', function() {
       alert( 'You focused me' );
});

$('[selector_input]').die().live( 'focusout', function() {
       alert( 'Bye!' );
});

最终结果是所有输入仅执行:focusout事件。如果我不使用.die(),我将重复调用相同的事件。

现在的解决方案可能是:

$('[selector_input]').die().live( 'focusout focusin', function(event) {
    if (event.type == "focusin")
       alert( 'You focused me' );
    else
       alert( 'Bye!' );
});

但我喜欢和第一个代码一样独立。

2 个答案:

答案 0 :(得分:2)

只需指定调用die()

的事件类型即可
$('[selector_input]').die('focusin').live( 'focusin', function() {
   alert( 'You focused me' );
});

$('[selector_input]').die('focusout').live( 'focusout', function() {
   alert( 'Bye!' );
});

我不太确定为什么你需要die()电话,你是否反复绑定事件?

答案 1 :(得分:0)

您可以执行类似

的操作
$('path to your input').live({
    focusin: function() { $('some output div').html('Focus!'); },
    focusout: function() { $('some output div').html('Bye!'); }
});

或者您可以删除.die() - 其目的是删除该选择器的先前事件处理程序。

如果你正在玩警报框,我不会同时搞乱焦点事件 - 当警报框出现时它会成为活动的东西,导致聚焦的东西不聚焦(然后可能重新聚焦),并且导致你的事件处理程序有时被无限调用。

BTW,请参阅http://jsfiddle.net/9pjWa/了解如何使用.live()的示例 - 听起来你做错了。 .live()非常重要是每次添加元素时都不需要重新绑定事件;事件处理程序位于文档上,而不是元素,并且匹配选择器的每个元素都可以触发事件,无论它们是在.live()之前还是之后添加的。实际上,每次重新绑定时,都会添加另一个处理所有匹配元素的事件处理程序,这也是为什么你看到多次调用事件处理程序的另一个原因。