Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

problem with jquery's "live" function

the problem

this works fine:

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

but this doesn't:

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

obs: the functions are wrapped in a $(document).ready event.


the outputs

working:

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

not working:

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
like image 636
Hugo Mota Avatar asked Aug 14 '11 21:08

Hugo Mota


1 Answers

From jQuery live() documentation:

Attach a handler to the event for all elements which match the current selector, now and in the future.

This function is meant to work on a selector, not a collection of elements. I would use the following syntax:

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

This selector will get any immediate children (hence what you had before) but with selection and not traversal. This should allow you to use live() as you would expect. Hope this helps!

like image 83
ghayes Avatar answered Oct 23 '22 10:10

ghayes