Comment faire grâce à la balise elle-même changer le type de texte en mot de passe
<input type='text' name='pass' />
Est-il possible d'insérer JS à l'intérieur de la balise d'entrée elle-même pour changer type = 'text' en type = 'password'?
Essayer:
<input id="hybrid" type="text" name="password" />
<script type="text/javascript">
document.getElementById('hybrid').type = 'password';
</script>
Modification du type
d'un <input type=password>
génère une erreur de sécurité dans certains navigateurs (anciennes versions IE et Firefox).
Vous devrez créer un nouvel élément input
, définir son type
sur celui que vous souhaitez et cloner toutes les autres propriétés de celle existante.
Je le fais dans mon plugin d'espace réservé jQuery: https://github.com/mathiasbynens/jquery-placeholder/blob/master/jquery.placeholder.js#L80-84
Pour travailler dans Internet Explorer:
La fonction ci-dessous accomplit les tâches ci-dessus pour vous:
<script>
function changeInputType(oldObject, oType) {
var newObject = document.createElement('input');
newObject.type = oType;
if(oldObject.size) newObject.size = oldObject.size;
if(oldObject.value) newObject.value = oldObject.value;
if(oldObject.name) newObject.name = oldObject.name;
if(oldObject.id) newObject.id = oldObject.id;
if(oldObject.className) newObject.className = oldObject.className;
oldObject.parentNode.replaceChild(newObject,oldObject);
return newObject;
}
</script>
Voici ce que j'ai pour le mien.
Essentiellement, vous utilisez les commandes onfocus et onblur dans la balise pour déclencher le javascript approprié. Cela pourrait être aussi simple que:
<span><input name="login_text_password" type="text" value="Password" onfocus="this.select(); this.setAttribute('type','password');" onblur="this.select(); this.setAttribute('type','text');" /></span>
Une version évoluée de cette fonctionnalité de base vérifie et vide la chaîne et renvoie la saisie du mot de passe au "mot de passe" d'origine en cas de zone de texte nulle:
<script type="text/javascript">
function password_set_attribute() {
if (document.getElementsByName("login_text_password")[0].value.replace(/\s+/g, ' ') == "" || document.getElementsByName[0].value == null) {
document.getElementsByName("login_text_password")[0].setAttribute('type','text')
document.getElementsByName("login_text_password")[0].value = 'Password';
}
else {
document.getElementsByName("login_text_password")[0].setAttribute('type','password')
}
}
</script>
Où HTML ressemble:
<span><input name="login_text_password" class="roundCorners" type="text" value="Password" onfocus="this.select(); this.setAttribute('type','password');" onblur="password_set_attribute();" /></span>
$(".show-pass").click(function (e) {
e.preventDefault();
var type = $("#signupform-password").attr('type');
switch (type) {
case 'password':
{
$("#signupform-password").attr('type', 'text');
return;
}
case 'text':
{
$("#signupform-password").attr('type', 'password');
return;
}
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" name="password" class="show-pass">
Ce n'est pas pris en charge par certains navigateurs (IE si je me souviens bien), mais cela fonctionne dans le reste:
document.getElementById("password-field").attributes["type"] = "password";
ou
document.getElementById("password-field").attributes["type"] = "text";
J'ai dû ajouter un ".value" à la fin du code d'Evert pour le faire fonctionner.
Je l'ai également combiné avec une vérification du navigateur afin que le champ de saisie type = "number" soit changé en type = "text" dans Chrome puisque 'formnovalidate' ne semble pas fonctionner en ce moment.
if (navigator.userAgent.toLowerCase().indexOf('chrome') > -1)
document.getElementById("input_id").attributes["type"].value = "text";
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.or/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
<script type="text/javascript" language="javascript">
function changefield(){
document.getElementById("passwordbox").innerHTML = "<input id=\"passwordfield\" type=\"password\" name=\"password-field\" title=\"Password\" tabindex=\"2\" />";
document.getElementById("password-field".focus();
}
</script>
</head>
<body>
<div id="passwordbox">
<input id="password-field" type="text" name="password-field" title="Password"onfocus="changefield();" value="Password" tabindex="2" />
</div>
<input type="submit" name="submit" value="sign in" tabindex="3" />
</body>
</html>
Oui, vous pouvez même le changer en déclenchant un événement
<input type='text' name='pass' onclick="(this.type='password')" />