Modifica
Per evitare entrambi gli eventi da sparare, dovrete segnare in qualche modo l'elemento prima inducendolo a perdere la concentrazione. In questo modo, il tuo gestore di eventi blur
può sapere se l'evento è oggetto di una chiave, o se ha perso l'attenzione legittimamente. Qualcosa di simile a questo:
$(".textbox").live("blur",function (event) {
if (!$(this).hasClass('keyupping'))
alert("blur Event fired");
});
$(".textbox").live("keyup",function (event) {
$(this).addClass('keyupping');
if(event.keyCode == 13){ // Detect Enter
alert("KeyUp fired after pressing Enter");
}
$(this).removeClass('keyupping');
});
Provalo: http://jsfiddle.net/GRMule/sR6zm/
risposta originale
Quando l'evento per keyup
incendi, si prepara a richiamare la finestra di avviso del browser, che prende fuoco dal documento e lo applica alla finestra di dialogo modale. Ciò provoca l'attivazione dell'evento di sfocatura.
L'evento blur
si avvia e termina il suo contesto di esecuzione prima che keyup
sappia cosa lo ha colpito.
Lo dimostra utilizzando qualcosa che non lo fa distogliere l'attenzione l'elemento, come console.log
: http://jsfiddle.net/GRMule/7vRLW/
L'ordine in cui gli eventi fuoco è specifico dell'implementazione, il che significa che non si può contare su Firefox recitazione come IE. Vedi le specifiche: http://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113/events.html#Events-eventgroupings. Prova il violino con gli avvisi in IE, e in questo caso vedrai che blur
colpisce prima di keyup
in IE 7 - e blur
non viene attivato in Chrome!
fonte
2012-06-21 16:59:22
Allora, chi dice che 'blur' NON DEVONO fuoco? Nota: 'live()' è deprecato, anche se questo fatto non ha nulla a che fare con il tuo problema qui. – kapa
prova 'keypress' invece' keyup' e usa 'on' invece di' live' – Dhiraj
Ehi, questa è una domanda pertinente. Si prega di riaprire. È un vero problema che ho appena avuto, dover prendere la chiave per lavorare prima di sfocare. –