.find()
在.live()
返回错误元素时遇到问题。
HTML:
<div id="div1">
<input type="text" id="txt1" />
</div>
Javascript(jQuery):
$('#div1,#div2').find('input').live('keypress',function() {
console.log(this);
});
我希望
<input id="txt1" type="text">要退回,而是我回来
<div id="div1">
为什么我会获取div
的父容器input
而不是input
本身的任何想法?
附录:
我并不是在寻找可行的备用代码(我可以很容易地将其分成两个.live()
次调用),我只是想找出为什么这不起作用。
是的,我意识到#div2不存在。
是的,我意识到.live()的文档对only attach .live() to the root selector说。但是,$(选择器).find()。live()works in simpler situations。
答案 0 :(得分:1)
我分道扬琴,在HTML中添加#div2
。您可以在此处看到它:http://jsfiddle.net/w9U34/有趣的是,如果您在第二个input
上执行按键操作,它将返回输入,但如果您在第一个中执行此操作,则返回div
答案 1 :(得分:1)
如果您使用代码:
console.log($("#div1, #div2").find("input").selector);
你会看到
#div1, #div2 input
这就是为什么当你记录'this'时你看到div的输出。至于为什么会这样,我不确定。我想如果你使用$(“...”)。find,find参数将应用于初始选择器中的所有参数。
要解决这个问题,我只需将选择器编写为:
$("#div1 input, #div2 input").live('keypress',function() {
console.log(this);
});
答案 2 :(得分:0)
您可以尝试:
$('#div1 input, #div2 input').live('keypress',function() {
console.log(this);
});
答案 3 :(得分:0)
在您认为.delegate()
有益的所有情况下,您应该使用.live()
。
代码:http://jsfiddle.net/JAAulde/6rxCu/12/
无论如何,这样做效率更高,因为.live()
现在只是.delegate()
的特殊别名。