Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用.live-in jQuery绑定多个事件?_Javascript_Jquery_Html_Ajax_Dom - Fatal编程技术网

Javascript 如何使用.live-in jQuery绑定多个事件?

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!' );

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

注意:此输入文本具有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!' );
});

但我喜欢独立,喜欢第一个密码

你可以这样做

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