$(selector).find()。live()从多选择器返回父项

我在.live()上使用.find()时遇到一些麻烦,返回错误的元素。

HTML:

 

Javascript(jQuery):

 $('#div1,#div2').find('input').live('keypress',function() { console.log(this); }); 

我预计

   

要归还,而是我回来了

  

有关为什么我将获得input的父容器div而不是input本身的任何想法?

jsFiddle示例


附录:

我并不是真的在寻找可行的替代代码(我可以轻松地将其分成两个.live()调用),我只是想找出为什么这不起作用。

是的,我意识到#div2不存在。

是的,我意识到.live()的文档说只将.live()附加到根选择器 。 但是,$(selector).find()。live() 在更简单的情况下工作 。

如果您使用代码:

 console.log($("#div1, #div2").find("input").selector); 

你会看见

 #div1, #div2 input 

这就是为什么当你记录’this’时你看到div的输出。 至于为什么会这样,我不确定。 我想如果你使用$(“…”)。find,find参数将应用于初始选择器中的所有参数。

要解决这个问题,我只需将选择器编写为:

 $("#div1 input, #div2 input").live('keypress',function() { console.log(this); }); 

我分叉你的小提琴,并在HTML中添加了一个#div2 。 你可以在这里看到它: http : //jsfiddle.net/w9U34/有趣的是,如果你在第二个input上做一个按键,它将返回输入,但如果你在第一个输入它返回一个div

你可以试试 :

 $('#div1 input, #div2 input').live('keypress',function() { console.log(this); }); 

你应该在你认为.live()有益的所有情况下使用.delegate()

代码: http : //jsfiddle.net/JAAulde/6rxCu/12/

无论如何,这样做效率更高,因为.live()现在只是.delegate()一个特殊别名。