$(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()
一个特殊别名。