Hugo Mota
Hugo Mota

Reputation: 11557

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

Upvotes: 6

Views: 288

Answers (1)

hayesgm
hayesgm

Reputation: 9096

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!

Upvotes: 7

Related Questions