2010-05-17 59 views
0

如何使用jQuery而不是onchange事件重寫此內容?將內聯javascript重寫爲jQuery

<input name="PasswordName" type="password" id="passwordID"> 
<p> 
<input type="checkbox" onchange="document.getElementById('passwordID').type = this.checked ? 'text' : 'password'"> Show Password 
</p> 
+1

我相信這不會在IE瀏覽器正常工作。 – SLaks 2010-05-17 16:35:48

+2

請確保在IE中測試它,因爲它不會讓你這樣做,至少不是你所擁有的,你將不得不移除/添加一個輸入元素,這種類型在IE中是不可變的:) – 2010-05-17 16:36:50

回答

3

如果這是你確切的標記,你可以做到這一點。還要注意,這個更新實際上可以在不同的瀏覽器上工作。由於您的複選框,目前沒有一個ID,我使用的是兄弟選擇通過其父p標籤來訪問它:

jQuery(function($){ // DOM Ready 

    $("#passwordID + p input").click(function(){ 
    var new_type = $(this).is(':checked') ? "text" : "password", 
     pwd  = $("#passwordID"); // We keep replacing it, so find it again 
    if(pwd.attr('type') !== new_type){ 
     pwd.replaceWith( 
      $("<input />", {type: new_type, value: pwd.val(), id: "passwordID", name: "PasswordName"}) 
     ); 
    } 
    }).click(); // Trigger it once on load in case browser has remembered the setting 

}); 

Demo on JSBin

+0

Zounds!我很高興我問過! – 2010-05-17 17:02:05

+0

+1謝謝你的糾正。我刪除了我的答案。 – user113716 2010-05-17 17:11:18

+0

我在JSBin的IE8上試過這個 - 它會顯示值,但不會再隱藏它。 – scunliffe 2010-05-17 17:18:57

4

像這樣:

$('#ID of CheckBox').change(function() { 
    $('#passwordID').attr('type', this.checked ? 'text' : 'password'); 
}); 
+2

否需要獲取底層元素 - $('#passwordID')。attr('type',...) – 2010-05-17 16:38:24

+0

是的,您是對的。 – SLaks 2010-05-17 16:39:24

+1

正如在對原始問題的評論中指出的那樣 - 這將在IE瀏覽器中不工作**,因爲IE無法更改類型屬性! bug:http://webbugtrack.blogspot.com/2007/09/bug-237-type-is-readonly-attribute-in.html – scunliffe 2010-05-17 16:45:39

相關問題