2013-01-24 8 views
6

Mögliche Duplizieren:
Focus and blur jQuery events not bubblingWie focus event zu delegieren?

var default_input_value = null; 
jQuery('body').on('focus focusout', 'input[type="text"]', function(event){ 
    if(event.type === 'focus'){ 
     default_input_value = jQuery(this).val(); 
     jQuery(this).val(''); 
    }else if(event.type === 'focusout') 
     if(jQuery(this).val().length === 0) 
     jQuery(this).val(default_input_value); 
    } 
); 

Dieser Code einfach reagiert nicht auf das Ereignis. P.S. ist es wichtig, dass es input[type="text"] sein würde, weil jQuery focus auch auf checkbox in einigen Situationen ausgelöst ....

+1

Versuchen Sie, auf 'focusin' zu sehen, ob das funktioniert, oder vielleicht' event.stopPropagation() '' – elclanrs

+0

default_input_value' scheint der Wert für den letzten zu halten focued Eingang und nicht einer für jeden. Versuchen Sie, einige Wasserzeichen-/Platzhalterprobleme zu lösen? – Stefan

+0

@elclanrs danke mann, 'focus' gibt' focusin' zurück – Kin

Antwort

18

Unter .on() jquery Dokument gibt es eine Beschreibung:

Die focus und blur Ereignisse durch die festgelegt sind W3C nicht zu blasen, aber jQuery definiert Cross-Browser focusin und focusout Ereignisse, die Blase. Wenn focus und blur zum Anfügen delegierter Ereignishandler verwendet werden, ordnet jQuery die Namen zu und liefert sie als focusin bzw. focusout. Verwenden Sie für Konsistenz und Übersichtlichkeit die Namen der Blasenbildungsereignisse.

Hoffe, das wäre nützlich.

Und Sie können diesen Code versuchen:

var default_input_value = null; 
jQuery('body').on('focusin focusout', 'input[type="text"]', function(event){ 
    if(event.type === 'focusin'){ 
     default_input_value = jQuery(this).val(); 
     jQuery(this).val(''); 
    }else if(event.type === 'focusout'){ 
     if(jQuery(this).val().length === 0) 
     jQuery(this).val(default_input_value); 
    } 
});