在以下代码中,.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'] });
答案 0 :(得分:3)
.live()
查询对象方法对基本上是选择器的查询进行操作。 $([$('input')])
不是选择器查询,而是对包含选择器查询的数组的查询。
来自the docs:
...应始终在选择器后直接调用
.live()
方法...
从我的评论中复制:
.autocomplete()
的工作原理是因为它与其他jQuery函数一致,它们枚举查询提供的对象并立即对它们进行操作。 .live()
不会枚举,而是稍后检查查询 - 无论何时触发任何事件。由于查询不是预期的形式,它只是忽略它。
答案 1 :(得分:1)
.live()
通过等待事件冒泡到document
来工作。然后它将event.target
与选择器进行比较,以确定它是否应该运行回调函数。由于您提供的是对象而不是选择器,因此无需进行比较,因此无法运行回调。 live()
除了获取其选择器外,不会查看对象本身。
.autocomplete()
直接在提供的jQuery对象上运行,并引用选择器。