Javascript 如何使用.live-in jQuery绑定多个事件?
我有一个包含两个事件的输入文本,并且我会复制它几次。要正确绑定这些元素,我使用: 注意:此输入文本具有focusin和focusout事件。Javascript 如何使用.live-in jQuery绑定多个事件?,javascript,jquery,html,ajax,dom,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!' );
$('[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!' );
});
但我喜欢独立,喜欢第一个密码 你可以这样做
$('path to your input').live({
focusin: function() { $('some output div').html('Focus!'); },
focusout: function() { $('some output div').html('Bye!'); }
});
或者您可以只删除.die()
——其目的就是删除该选择器以前的事件处理程序
如果你在玩警报框,我不会同时处理焦点事件——警报框出现时会变成活动的东西,导致聚焦的东西失去焦点(然后可能重新聚焦),并导致事件处理程序有时被无限调用
顺便说一句,有关如何使用
.live()
的示例,请参见——听起来你做得不对。.live()
的关键在于,您不需要每次添加元素时都重新绑定事件;事件处理程序位于文档上,而不是元素上,与选择器匹配的每个元素都可以触发事件,无论它们是在.live()之前还是之后添加的。事实上,每次重新绑定时,都会添加另一个处理所有匹配元素的事件处理程序,这也是为什么会多次调用事件处理程序的另一个原因。只需指定调用die()的事件类型。
我不太清楚为什么您需要调用die()
,但是,您是否重复绑定事件?您确实意识到.die()
的目的是删除以前为该选择器设置的任何事件处理程序,对吗?是的,我现在需要,但我不明白为什么退出.die(),会附加多个事件,例如:如果没有.die(),我会收到5个警报(“你关注我”)我做错了什么?你为什么要重新绑定事件?Live(与bind相反)是指将事件一次性绑定到选择器,即事件绑定到与选择器匹配的元素,即使这些元素是在绑定之后添加的。@Cris:请记住,一个警报框成为前台对象,导致以前聚焦的对象不聚焦。5个Live-->您将得到:5!!集中集中集中集中集中你到底在干什么?给同一件事打5次电话?你知道.live()
是如何工作的吗。。。不仅仅是五次、六次、四次等等。当我用jQuery添加更多的新DOM时,LIVE事件被调用。。你知道吗?在克隆元素后,尝试删除此代码,这应该会起作用。你不必重新绑定现场活动,不应该。如果新框是旧框的克隆,因此具有相同的类型和CSS类,则不需要调用live()
来重新连接事件。这就是它的目的。
$('[selector_input]').die('focusin').live( 'focusin', function() {
alert( 'You focused me' );
});
$('[selector_input]').die('focusout').live( 'focusout', function() {
alert( 'Bye!' );
});