2013-06-30 86 views
1

我有一個具有以下屬性的簡單的輸入元素:jQuery的:焦點/模糊的事件不輸入更換後工作

<input id="InputPassword" type="password" value="Password" class="initClass"/> 

爲了建立一個跨瀏覽器的佔位符,這我用testFocusBlur功能

function testFocusBlur(){ 
$('input').focus(function() { 
    if($(this).attr('type')=='text'){ 
     var campoPassword=$(this); 
     replaceInputType(campoPassword[0], 'password') 
    } 
}).blur(function() { 
    if($(this).attr('type')=='password'){ 
    var campoPassword=$(this); 
    replaceInputType(campoPassword[0], 'text') 
    } 
}); 
$('input').blur(); 

}

其中,在$(文件)。就緒事件:

  1. 在輸入元素上調用blur事件;
  2. if type = password調用replaceInputType javascript函數;
  3. replaceInputType函數創建了一個新的DOM輸入元件,設置類型=文本它,獲得舊輸入元素的屬性以及改變從initClass到的NewClass類;
  4. 新的輸入要素追加到同一div

上述工作正常,但是,一旦新的輸入元素設置的,我專注於它,初始testFocusBlur功能不工作了

看到:http://jsfiddle.net/4tRzs/2/

注:我不想設置在輸入一個內聯函數,如聚焦狀態=「....」

請幫幫忙,謝謝。

+0

有,你可以使用https://github.com/ginader/HTML5-placeholder-polyfill – undefined

回答

0

您需要使用on功能從jQuery的

$(document).on("focus" , "input", function(){ 
    ... 
} 

on是老live功能。 documentation

你有這樣的事情在你的函數:

function testFocusBlur(){ 
$(document).on("focus", 'input', function() { 
    if($(this).attr('type')=='text'){ 
     var campoPassword=$(this); 
     replaceInputType(campoPassword[0], 'password') 
    } 
}) 
$(document).on("blur", "input", function() { 
    if($(this).attr('type')=='password'){ 
    var campoPassword=$(this); 
    replaceInputType(campoPassword[0], 'text') 
    } 
}); 
} 
+0

非常感謝許多polyfills,它肯定但是...如果我不想使用「on」綁定方法,有一種方法可以在重新創建輸入的函數(ReplaceInputType)中提供一個新的模糊/焦點事件綁定到新創建的輸入? – user1675703

+0

像這樣: 功能replaceInputType(的OLDobject,的inputType){ [.....] [.....] [.....] oldObject.parentNode.replaceChild(NEWOBJECT,的OLDobject); 「讓這個新創建的對象認識到這是之前綁定親緣/模糊事件」 回報NEWOBJECT; } – user1675703

+0

創建新輸入時,您可以再次調用testFocusBlur()函數。其他方法我不認爲有。 –