$(document).ready(function() {
// #login-box password field
$('#password').attr('type', 'text');
$('#password').val('Password');
});
Ceci est censé changer le #password
champ de saisie (avec id="password"
) correspondant type
password
à un champ de texte normal, puis remplir le texte «Mot de passe».
Cela ne fonctionne pas, cependant. Pourquoi?
Voici le formulaire:
<form enctype="application/x-www-form-urlencoded" method="post" action="/auth/sign-in">
<ol>
<li>
<div class="element">
<input type="text" name="username" id="username" value="Prihlasovacie meno" class="input-text" />
</div>
</li>
<li>
<div class="element">
<input type="password" name="password" id="password" value="" class="input-text" />
</div>
</li>
<li class="button">
<div class="button">
<input type="submit" name="sign_in" id="sign_in" value="Prihlásiť" class="input-submit" />
</div>
</li>
</ol>
</form>
javascript
jquery
html-input
Richard Knop
la source
la source
Réponses:
Il est très probable que cette action soit empêchée dans le cadre du modèle de sécurité du navigateur.
Edit: en effet, en train de tester en ce moment dans Safari, je reçois l'erreur
type property cannot be changed
.Edit 2: cela semble être une erreur tout droit sortie de jQuery. L'utilisation du code DOM direct suivant fonctionne très bien:
Edit 3: Directement à partir de la source jQuery, cela semble être lié à IE (et pourrait être soit un bogue soit une partie de leur modèle de sécurité, mais jQuery n'est pas spécifique):
la source
attr
mais permettant de changer l'type
attribut sur lesinput
éléments.Encore plus facile ... il n'y a pas besoin de toute la création d'élément dynamique. Créez simplement deux champs séparés, en faisant un champ de mot de passe "réel" (type = "mot de passe") et un champ de mot de passe "faux" (type = "texte"), définissant le texte dans le faux champ sur une couleur gris clair et définir la valeur initiale sur «Mot de passe». Ajoutez ensuite quelques lignes de Javascript avec jQuery comme ci-dessous:
Ainsi, lorsque l'utilisateur entre dans le champ «faux» mot de passe, il sera masqué, le champ réel sera affiché et le focus se déplacera vers le champ réel. Ils ne pourront jamais entrer de texte dans le faux champ.
Lorsque l'utilisateur quitte le champ de mot de passe réel, le script verra s'il est vide, et si tel est le cas, il masquera le champ réel et affichera le faux.
Attention à ne pas laisser d'espace entre les deux éléments d'entrée car IE se positionnera un peu après l'autre (rendu de l'espace) et le champ semblera se déplacer lorsque l'utilisateur y entrera / le quittera.
la source
$('#password').show(); $('#password').focus();
as$('#password').show().focus();
Solution en une étape
la source
document.getElementById
devrait être suffisant et vous n'avez pas besoin de jQuery pour cela! ;-)De nos jours, vous pouvez simplement utiliser
Mais bien sûr, vous devriez vraiment faire ça
en tout sauf IE. Il existe également des cales d'espace réservé pour imiter cette fonctionnalité dans IE.
la source
placeholder="Password"
. La spécification HTML et MDN sur l'placeholder
attribut. Une cale JavaScript pourplaceholder
.Une solution plus multi-navigateur… J'espère que l'essentiel de cela aide quelqu'un là-bas.
Cette solution essaie de définir l'
type
attribut, et en cas d'échec, elle crée simplement un nouvel<input>
élément, en préservant les attributs d'élément et les gestionnaires d'événements.changeTypeAttr.js
( GitHub Gist ):la source
Cela fonctionne pour moi.
la source
Une façon ultime d'utiliser jQuery:
Laissez le champ de saisie d'origine masqué à l'écran.
Créez un nouveau champ de saisie à la volée par JavaScript.
Migrez l'ID et la valeur du champ de saisie masqué vers le nouveau champ de saisie.
Pour contourner l'erreur sur IE comme
type property cannot be changed
, vous pouvez trouver cela utile comme ci-dessous:Attachez l'événement click / focus / change au nouvel élément d'entrée, afin de déclencher le même événement sur une entrée cachée.
L'ancien élément d'entrée caché est toujours à l'intérieur du DOM et réagira donc avec l'événement déclenché par le nouvel élément d'entrée. Au fur et à mesure que l'ID est échangé, le nouvel élément d'entrée agira comme l'ancien et répondra à tout appel de fonction à l'ID de l'ancienne entrée masquée, mais il sera différent.
la source
Avez-vous essayé d'utiliser .prop ()?
http://api.jquery.com/prop/
la source
Je n'ai pas testé dans IE (car j'en avais besoin pour un site iPad) - un formulaire dont je ne pouvais pas changer le HTML mais je pouvais ajouter JS:
(Old school JS est moche à côté de tous les jQuery!)
Mais, http://bugs.jquery.com/ticket/1957 établit un lien vers MSDN: "À partir de Microsoft Internet Explorer 5, la propriété type est en lecture / écriture une seule fois, mais uniquement lorsqu'un élément d'entrée est créé avec la méthode createElement et avant qu'il ne soit ajouté au document. " alors peut-être pourriez-vous dupliquer l'élément, changer le type, ajouter au DOM et supprimer l'ancien?
la source
Créez simplement un nouveau champ pour contourner ce problème de sécurité:
la source
J'ai reçu le même message d'erreur en tentant de le faire dans Firefox 5.
Je l'ai résolu en utilisant le code ci-dessous:
Et pour l'utiliser, définissez simplement les attributs onFocus et onBlur de vos champs sur quelque chose comme ceci:
J'utilise également cela pour un champ de nom d'utilisateur, donc il bascule une valeur par défaut. Réglez simplement le deuxième paramètre de la fonction sur '' lorsque vous l'appelez.
Il convient également de noter que le type par défaut de mon champ de mot de passe est en fait un mot de passe, juste au cas où un utilisateur n'a pas activé javascript ou si quelque chose ne va pas, de cette façon, son mot de passe est toujours protégé.
La fonction $ (document) .ready est jQuery et se charge lorsque le document a fini de se charger. Cela transforme ensuite le champ de mot de passe en champ de texte. De toute évidence, vous devrez remplacer «password_field_id» par l'ID de votre champ de mot de passe.
N'hésitez pas à utiliser et modifier le code!
J'espère que cela aide tous ceux qui ont eu le même problème que moi :)
- CJ Kent
EDIT: Bonne solution mais pas absolue. Fonctionne sur FF8 et IE8 MAIS pas complètement sur Chrome (16.0.912.75 ver). Chrome n'affiche pas le texte du mot de passe lors du chargement de la page. Aussi - FF affichera votre mot de passe lorsque le remplissage automatique est activé.
la source
Solution simple pour tous ceux qui veulent la fonctionnalité dans tous les navigateurs:
HTML
jQuery
la source
Cela a fonctionné pour moi.
la source
Les propriétés de type ne peuvent pas être modifiées, vous devez remplacer ou superposer l'entrée par une entrée de texte et envoyer la valeur au mot de passe saisi lors de la soumission.
la source
Je suppose que vous pouvez utiliser une image d'arrière-plan qui contient le mot "mot de passe" et le remplacer par une image d'arrière-plan vide
.focus()
..blur()
----> image avec "mot de passe".focus()
-----> image sans "mot de passe"Vous pouvez également le faire avec du CSS et jQuery. Affichez un champ de texte exactement au-dessus du champ de mot de passe, hide () est sur focus () et concentrez-vous sur le champ de mot de passe ...
la source
Essayez cette
démo est ici
la source
Cela fonctionne beaucoup plus facilement avec cela:
et afin de le remettre à nouveau dans le champ de mot de passe (en supposant que le champ de mot de passe est la deuxième balise d'entrée avec le type de texte ):
la source
utiliser celui-ci c'est très simple
la source
la source
la source
Ça fera l'affaire. Bien qu'il puisse être amélioré pour ignorer les attributs qui ne sont plus pertinents.
Brancher:
Usage:
Violon:
http://jsfiddle.net/joshcomley/yX23U/
la source
Simplement ceci:
tel que
Cela suppose que votre champ de saisie a été défini sur "texte" au préalable.
la source
Voici un petit extrait qui vous permet de modifier les
type
éléments des documents.jquery.type.js
( GitHub Gist ):Il contourne le problème en supprimant le
input
du document, en modifiant letype
puis en le remettant là où il était à l'origine.Notez que cet extrait n'a été testé que pour les navigateurs WebKit - aucune garantie sur quoi que ce soit d'autre!
la source
delete jQuery.attrHooks.type
pour supprimer la gestion spéciale des types d'entrée par jQuery.Voici une méthode qui utilise une image à côté du champ de mot de passe pour basculer entre voir le mot de passe (saisie de texte) et ne pas le voir (saisie de mot de passe). J'utilise une image «œil ouvert» et «œil fermé», mais vous pouvez utiliser ce qui vous convient. La façon dont cela fonctionne est d'avoir deux entrées / images et en cliquant sur l'image, la valeur est copiée de l'entrée visible à l'entrée cachée, puis leur visibilité est permutée. Contrairement à la plupart des autres réponses qui utilisent des noms codés en dur, celle-ci est suffisamment générale pour l'utiliser plusieurs fois sur une page. Il se dégrade également gracieusement si JavaScript n'est pas disponible.
Voici à quoi ressemblent deux d'entre eux sur une page. Dans cet exemple, le mot de passe-A a été révélé en cliquant sur son œil.
la source
J'aime cette façon de changer le type d'un élément d'entrée: old_input.clone () .... Voici un exemple. Il y a une case à cocher "id_select_multiple". Si cela est changé en "sélectionné", les éléments d'entrée avec le nom "foo" doivent être changés en cases à cocher. Si elle n'est pas cochée, ils devraient redevenir des boutons radio.
la source
voici une solution DOM
la source
J'ai créé une extension jQuery pour basculer entre le texte et le mot de passe. Fonctionne dans IE8 (probablement 6 et 7 également, mais non testé) et ne perdra pas votre valeur ou vos attributs:
Fonctionne comme un charme. Vous pouvez simplement appeler
$('#element').togglePassword();
pour basculer entre les deux ou donner une option pour `` forcer '' l'action en fonction d'autre chose (comme une case à cocher):$('#element').togglePassword($checkbox.prop('checked'));
la source
Juste une autre option pour tous les amateurs d'IE8, et cela fonctionne parfaitement dans les nouveaux navigateurs. Vous pouvez simplement colorer le texte pour qu'il corresponde à l'arrière-plan de l'entrée. Si vous avez un seul champ, cela changera la couleur en noir lorsque vous cliquerez / vous concentrerez sur le champ. Je ne l'utiliserais pas sur un site public car cela «dérouterait» la plupart des gens, mais je l'utilise dans une section ADMIN où une seule personne a accès aux mots de passe des utilisateurs.
-OU-
Cela, également nécessaire, remettra le texte en blanc lorsque vous quitterez le champ. Simple, simple, simple.
[Une autre option] Maintenant, si vous avez plusieurs champs que vous recherchez, tous avec le même ID, comme je l'utilise, ajoutez une classe de «passe» aux champs dans lesquels vous souhaitez masquer le texte. les champs de mot de passe saisissent «texte». De cette façon, seuls les champs avec une classe de «réussite» seront modifiés.
En voici la deuxième partie. Cela remet le texte en blanc après avoir quitté le champ.
la source
Je viens de faire ce qui suit pour changer le type d'une entrée:
et il fonctionne.
J'avais besoin de le faire parce que j'utilisais les datpickers jQuery UI dans un projet ASP NET Core 3.1 et qu'ils ne fonctionnaient pas correctement sur les navigateurs basés sur Chromium (voir: https://stackoverflow.com/a/61296225/7420301 ).
la source