2010-05-17 5 views
0

Comment réécrire ceci en utilisant jQuery au lieu de l'événement onchange?Réécriture du javascript en ligne dans 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

Je crois que cela ne fonctionnera pas correctement dans IE. – SLaks

+2

Assurez-vous de tester cela dans IE, car il ne vous permettra pas de le faire, au moins pas comme vous l'avez, vous devrez supprimer/ajouter un élément d'entrée, le type est immuable dans IE :) –

Répondre

3

Si ceci est votre balisage exacte, vous pouvez le faire. Notez également que cette mise à jour fonctionne réellement sur différents navigateurs. Étant donné que votre case n'a pas une carte d'identité, je me sers d'un sélecteur de frères et soeurs pour y accéder par son étiquette parent 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! Je suis content que j'ai demandé! –

+0

+1 Merci pour la correction. J'ai supprimé ma réponse. – user113716

+0

J'ai essayé ceci dans IE8 sur JSBin - il montrera la valeur, mais ne la cachera pas encore. – scunliffe

4

Comme ceci:

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

No besoin d'obtenir l'élément sous-jacent - $ ('# passwordID'). attr ('type', ...) –

+0

Oui, vous avez raison. – SLaks

+1

Comme indiqué dans les commentaires à la question d'origine - cela ne fonctionnera pas ** dans Internet Explorer, car IE ne peut pas changer l'attribut de type! bug: http://webbugtrack.blogspot.com/2007/09/bug-237-type-is-readonly-attribute-in.html – scunliffe

Questions connexes