`.live()`和`.autocomplete()`之间的不一致

时间:2011-09-01 23:25:57

标签: jquery

在以下代码中,.live()不起作用,但.autocomplete()会起作用。为什么? (见http://jsfiddle.net/fRpCy/1/

var input = [];
input.push($('input'));

$(input).live('keydown', function (event) {
    console.log('You have pressed a key!');
});

$(input).autocomplete({ source: ['test1', 'test2'] });

2 个答案:

答案 0 :(得分:3)

.live()查询对象方法对基本上是选择器的查询进行操作。 $([$('input')])不是选择器查询,而是对包含选择器查询的数组的查询。

来自the docs

  

...应始终在选择器后直接调用.live()方法...


从我的评论中复制:

.autocomplete()的工作原理是因为它与其他jQuery函数一致,它们枚举查询提供的对象并立即对它们进行操作。 .live()不会枚举,而是稍后检查查询 - 无论何时触发任何事件。由于查询不是预期的形式,它只是忽略它。

答案 1 :(得分:1)

.live()通过等待事件冒泡到document来工作。然后它将event.target与选择器进行比较,以确定它是否应该运行回调函数。由于您提供的是对象而不是选择器,因此无需进行比较,因此无法运行回调。 live()除了获取其选择器外,不会查看对象本身。

.autocomplete()直接在提供的jQuery对象上运行,并引用选择器。