2012-11-22 11 views
7

Ho un semplice esempio in cui ho un campo input e ho messo un evento blur e change su di esso:Posso impedire che si verifichi un evento di sfocatura?

HTML

<input name="test" value=""/> 

JS

$('input').change(function(e){ 

alert('change'); 

}); 

$('input').blur(function(e){ 

alert('blur'); 
}); 

E ' possibile impedire l'evento blur se il change evento è stato attivato?

Un modo sarebbe definire un valore booleano che cambia quando è stato attivato l'evento change, ma non mi piace, c'è un modo migliore?

Here è un esempio con cui è possibile giocare.

risposta

14

problema risolto da this ..

$('input').change(function(e){ 
    alert('change'); 
    e.stopImmediatePropagation(); 
    $(this).off("blur"); 
}); 

$('input').focus(function(e){ 
    $(this).on("blur", function(e){ 
    e.stopImmediatePropagation(); 
    e.preventDefault(); 
    alert('blur'); }); 
}); 
5

uso .off

DEMO

$('input').change(function(e){ 
    alert('change'); 
    e.stopImmediatePropagation(); 
    $(this).off("blur"); //$("input[name='test']").off("blur"); 
}); 

$('input').blur(function(e){ 
    e.preventDefault(); 
alert('blur'); 
});​ 
+0

ora 'blur()' non funziona. Non funziona mentre perde il focus dell'elemento 'input' – Akhil

+1

Prima di tutto, è meglio usare' $ (this) 'invece di' $ ("input [nome = 'test']") ', in secondo luogo, come @MattLin menzionato, rimuove completamente l'evento di sfocatura. – Tomer

+0

@MattLin, quando sfocerà il fuoco degli eventi? –

1

è possibile utilizzare

this.unbind('blur'); sul onchange chiamare

+0

ma non voglio perdere il mio evento di sfocatura, voglio solo prevenirlo nel caso in cui l'evento di cambiamento sia stato sparato ... – Tomer

+1

Puoi rifarlo in altro caso ... – Rab

0

Se ho capito bene la risposta è quella di utilizzare event.preventDefault(); Vedi http://jsbin.com/welcome/52201/edit per una demo.

+0

che non funziona, hai solo return; 'che impedisce che l'avviso si verifichi ... – Tomer

+1

OK, pensavi di fare qualcos'altro. In tal caso è possibile controllare http://jsbin.com/asubog/1/edit manualmente ma .off() sembra più pulito. –

Problemi correlati