2013-01-24 6 views
6

可能性の重複:
Focus and blur jQuery events not bubblingフォーカスイベントを委任する方法は?

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); 
    } 
); 

このコードは、単にイベントに応答しません。 P.P. focusblurイベントがで指定されている

+1

、または多分'するevent.stopPropagation() '' – elclanrs

+0

default_input_value'が最後focued入力の値を保持しているようです1つではありません。いくつかのウォーターマーク/プレースホルダーの問題を解決しようとしていますか? – Stefan

+0

@elclanrsありがとう、 'focus'は' focusin'を返します – Kin

答えて

18

.on() jqueryのドキュメントの下では、説明があります....また、いくつかの状況ではcheckboxに発火するjQuery focusので、input[type="text"]があるだろうということが重要ですW3Cはバブルを起こさないが、jQueryはブラウザ間でバブルを起こすようなクロスブラウザfocusinfocusoutイベントを定義している。委任されたイベントハンドラを添付するためにfocusblurを使用すると、jQueryはその名前をマップし、それぞれfocusinfocusoutとして配信します。一貫性と明確さのために、バブリングイベントタイプ名を使用してください。

希望すると便利です。

そして、あなたは、このコードを試すことができます:それが動作するかどうかを確認focusin` `試着

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); 
    } 
});