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

时间:2011-08-03 22:03:25

标签: jquery

.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本身的任何想法?

jsFiddle example


附录:

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

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

是的,我意识到.live()的文档对only attach .live() to the root selector说。但是,$(选择器).find()。live()works in simpler situations

4 个答案:

答案 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()的特殊别名。