2013-01-24 65 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.S. 會有input[type="text"],因爲jQuery focus也激發在某些情況下checkbox重要的是....

+1

嘗試focusin'其是否正常工作,或可能'event.stopPropagation()'' – elclanrs

+0

似乎default_input_value'持有的價值最後focued輸入而不是每個人。你想解決一些水印/佔位符問題嗎? – Stefan

+0

@elclanrs謝謝你,'focus'返回'focusin' – Kin

回答

18

.on() jQuery的文件,有一個說明:

focusblur事件由指定W3C不會冒泡,但是jQuery定義了跨瀏覽器focusinfocusout的事件。當focusblur用於附加委派的事件處理程序時,jQuery映射名稱並分別將其作爲focusinfocusout傳遞。爲了保持一致性和清晰度,請使用冒泡事件類型名稱。

希望這會有用。

你還可以試試下面的代碼:對`

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