Pourquoi la jQuery ne change pas l'attribut type de #password_input au mot de passe?
15 Réponses :
Propriété / attribut de type 'ne peut pas être modifié. P>
Edit: C'était précis pour JQuery au moment de son affectation. Voir d'autres réponses pour comment cela peut être fait maintenant. P>
Regardez des rapports de bogues sur api.jquery.com/attr pour voir que vous n'êtes pas seul. Firebug vous dira même que «la propriété ne peut pas être changée».
Je ne suis pas sûr de savoir pourquoi cela continue à avoir voté ... Quiconque se souciait d'expliquer pourquoi je continue à obtenir des bowvotes?
Parce que les gens sont confondus entre JQuery et JavaScript. Peut-être que vous pouvez éditer votre réponse pour refléter cela?
@Candidj a lu le message. En 2011, JQuery n'avait pas cette capacité.
Vous ne pouvez pas changer l'attribut type. Vous devez créer un nouvel élément et supprimer l'ancien comme celui-ci:
var originalBtn = $("#password_input");
var newBtn = originalBtn.clone();
newBtn.attr("type", "password");
newBtn.insertBefore(originalBtn);
originalBtn.remove();
newBtn.attr("id", "password_input");
Il s'agit d'une mesure de sécurité que la plupart des grands navigateurs utilisent pour atténuer le vol d'écran et le vol de mots de passe (il est plus important d'aller dans l'autre sens, du mot de passe code> à code> sur code>).
Je ne peux pas dire à votre code ce que vous essayez de faire, mais voici ma supposition: vous voulez une zone de texte avec le mot Ceci est maintenant plus facile à accomplir dans les navigateurs modernes. Utilisez simplement quelque chose comme ceci (voici un jsfiddle ): p> mot de passe code> en tant que indice, et quand il se concentre , l'utilisateur entre dans son mot de passe comme champ de mot de passe. Pour y accomplir, vous pouvez utiliser deux éléments: un Mise à jour h3>
<input type="password" placeholder="Password" />
oui c'est exactement ce que je vais pour ... mais cela jeta un poubelle ce que je pensais être assez simple
@Andrewferrara vérifier ma réponse mise à jour de la solution de flou de focus
Ceci le fera
$('#clear').focus(function() {
$('#clear').hide();
$('#password_input').show().focus();
});
$('#password_input').blur(function() {
if ($('#password_input').val() == '') {
$('#clear, #password_input').toggle();
}
});
<span>Password:</span>
<input type="text" id="pwd" style="width: 180px; color: Gray;" onfocus="Changetxt();this.type='password'" onblur="if(this.value==''){this.type='text';textboxtype();}" value="Enter Your Password Here" />
<script>
function Changetxt() {
if ($('#pwd').val() == "Enter Your Password Here") {
$('#pwd').val('');
$('#pwd').css('color', 'black');
}
}
function textboxtype() {
if ($('#pwd').val().length < 1) {
$('#pwd').val('Enter Your Password Here');
$('#pwd').css('color', 'gray');
}
}
</script>
Les réponses ci-dessus sont partiellement erronées lorsqu'elles stiportent l'attribut type ne peut pas être modifiée. Oui, cela peut être changé via la méthode Prop / ATTR JQUERY. La chose est, elle est soutenue par tous les navigateurs mais c'est-à-dire p>
oui u peut.
Essayez ceci Ses travaux P>
<input type="text" class="pwd">
$('.pwd').click(function(){
$(this).get(0).type='password';
});
Travaillé en chrome comme un charme. Merci.
Homme, c'était mon "Oh, j'ai appris quelque chose aujourd'hui" moment pour aujourd'hui. Merci beaucoup!
Impressionnant! Fonctionne comme un charme.
Nice, mais cela peut-il être accompli sans jQuery?
BTW, est dit qu'il ne fonctionne pas avec IE7 et IE8. Quoi qu'il en soit, travaillé dans le chrome pour moi.
Comment ça se passe (0) de ce travail? Pour moi, cela fonctionne sur la page où prévu, mais provoque des effets secondaires morts sur d'autres pages.
$ (this) .get (0) dans ce contexte est inutile. Il rend un objet JavaScript normal dans un objet JQuery puis obtient l'objet normal tout droit. Il suffit d'utiliser ceci.type = 'mot de passe' à la place.
Vous pouvez toujours utiliser le pure JS comme:
ça peut! Je le fais tout le temps avec JavaScript.
parce que la question est sur jQuery et non javascript
Peut avoir besoin d'afficher des informations de texte dans le champ Mot de passe apporté sur l'image, définie sur l'arrière-plan du champ de mot de passe et supprimé lorsque l'image de fond de la mise au point sur le champ de mot de passe, de manière à obtenir l'effet d'inviter l'utilisateur < / p>
J'ai rencontré un défi similaire récemment et je voudrais évaluer mon opinion.
J'ai utilisé certaines des solutions ci-dessus et d'autres utilisateurs de JQuery (que j'aime beaucoup). Mais lorsque l'heure du test est venue, nous réalisons que les solutions via JQuery et et le opposé p> ATT () code> ne fonctionne pas. Donc, je trouve la solution appropriée par pure JavaScript.
Avez-vous essayé d'utiliser.
Cela a fonctionné pour moi (pour changer le type de caché code> à initial code>). Merci!
Créez simplement 2 champs d'entrée de synchronisation. Un comme mot de passe et un comme texte. Puis commuter leur visibilité via le bouton. N'oubliez pas de masquer l'entrée de texte au début.
// sync input fields
$('#inp_passwd').keyup(function(){
$('#inp_passwd2').val($(this).val());
});
// show clear password
$('#btn_show_passwd').mousedown(function(){
$('#inp_passwd').hide();
$('#inp_passwd2').show();
});
// hide clear password
$('#btn_show_passwd').mouseup(function(){
$('#inp_passwd').show();
$('#inp_passwd2').hide();
});
// hide hidden text-field on start
$('#btn_show_passwd').mouseup();
C'est une solution vraiment élégante. J'aime l'utilisation de la souris haut / bas au lieu d'une bascule.
Ne fonctionnera pas si vous prévoyez de soumettre le formulaire. Le nom de champ devrait être identique et la forme ne choisira qu'une valeur de la première ou de la dernière entrée.
Toutes les solutions ici n'ont pas fonctionné pour moi (version chromée 51.0.2704.103 m (64 bits)). L'a-t-il comme ça et cela fonctionne:
jQuery(function() {
setTimeout(function(){
jQuery('.pwForm').attr('type','password');
}, 1);
});
Utilisez ce code:
<input type="text" id="password_input" name="password" />
<script>
$("#password_input").click(function(){
$(this).prop('type', 'date');
});
</script>
Pour changer la valeur d'attribut de type, il suffit de mettre à jour votre jQuery.
Voir l'exemple ci-dessous. P>
<!DOCTYPE html>
<html>
<head>
<title>Page Title</title>
</head>
<body>
<div id="loginBox">
<form>
<input type="text" id="username_input" name="username" /><br />
<input type="text" id="password_input" name="password" />
</form>
</div>
<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$("#password_input").attr('type','password');
});
</script>
</body>
</html>