Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

jQuery: How to find elements *without* a certain class

Why does this fail...

$( 'div.contactAperson input' ).not( 'input.hadFocus' ).focus(function() {
    $(this).attr('value', '' );
});

...it's meant to sniff out input's that have not got the class .hadFocus and then when one of that subset receives focus it should zap the value to null.

Right now, input values are always getting zapped -- the test .not( 'input.hadFocus' ) is failing to stop execution.

Btw, preceding the above code is the following code, which is working fine:

$( 'div.contactAperson input' ).focus(function() {
    $( this ).addClass( 'hadFocus' );
});

Thanks for any cleverness - cheers, -Alan

like image 430
Alan Avatar asked Apr 26 '10 17:04

Alan


2 Answers

You need the handler to run based on the current state of the element - not the state when it was bound. You probably need to use a live binding.

Try something like this:

$('div.contactAperson input:not(.hadFocus)').live('focus', function() {
    $(this).attr('value', '' );
});
like image 145
hwiechers Avatar answered Oct 23 '22 12:10

hwiechers


$( 'div.contactAperson > :input' ).not( ':input.hadFocus' ).focus(function() {
    $(this).attr('value', '' );
});

good luck

like image 39
ozsenegal Avatar answered Oct 23 '22 13:10

ozsenegal