网站搜索

javascript - jquery 的 "live" 函数问题


问题

这个工作正常:

$('#edit_curriculum .generated').children().blur(function(){
    console.log(this);
});

但这并没有:

$('#edit_curriculum .generated').children().live('blur', function(){
    console.log(this);
});

注意:这些函数被包装在一个 $(document).ready 事件中。

输出

工作中:

<input type="text" name="phones[]" class="medium phone valid">

不起作用:

Uncaught Syntax error, unrecognized expression: )
k.errorjquery.js:17
k.filterjquery.js:17
kjquery.js:17
c.querySelectorAll.kjquery.js:17
k.matchesSelectorjquery.js:17
f.extend.filterjquery.js:17
f.fn.extend.isjquery.js:17
f.fn.extend.closestjquery.js:17
Njquery.js:16
f.event.handlejquery.js:17
f.event.add.k.i.handle.kjquery.js:16
f.event.triggerjquery.js:17
ejquery.js:17

答案#1

摘自 jQuery live() 文档:

为当前选择器匹配的所有元素(现在和将来)附加一个事件处理程序。

此函数旨在作用于 selector,而不是一个元素集合。我会使用以下语法:

 $('#edit_curriculum .generated > *').live('blur', function(){
   console.log(this);
 });

这个选择器将获取任何直接子元素(因此就是你之前的使用方式),但使用的是 selection 而不是 traversal。这应该可以让你像预期那样使用 live()。希望这有帮助!