Ich möchte die Kennwortumschaltfunktion erstellen, wenn Sie nur mit Javascript auf das Augensymbol klicken. Ich habe Code dafür geschrieben, aber er zeigt nur den Passworttext an und nicht umgekehrt. Kann jemand den Logikfehler im Code unten sehen.
HTML Quelltext:
<input type="password" placeholder="Password" id="pwd" class="masked" name="password" />
<button type="button" onclick="showHide()" id="eye">
<img src="eye.png" alt="eye"/>
</button>
Javascript-Code:
function show()
{
var p = document.getElementById('pwd');
p.setAttribute('type','text');
}
function hide()
{
var p = document.getElementById('pwd');
p.setAttribute('type','password');
}
function showHide()
{
var pwShown = 0;
document.getElementById("eye").addEventListener("click", function() {
if (pwShown == 0)
{
pwShown = 1;
show();
}
else {
pwShow = 0;
hide();
}
}, false);
}
Sie sind bei jedem Klick auf eine Schaltfläche ein verbindliches Klickereignis. Sie möchten nicht mehrere Ereignishandler. Außerdem definieren Sie var pwShown = 0
bei jedem Klick neu, sodass Sie den Eingabezustand niemals rückgängig machen können (pwShown
bleibt gleich).
Entfernen Sie das Onclick-Attribut und binden Sie das Click-Ereignis mit addEventListener :
function show() {
var p = document.getElementById('pwd');
p.setAttribute('type', 'text');
}
function hide() {
var p = document.getElementById('pwd');
p.setAttribute('type', 'password');
}
var pwShown = 0;
document.getElementById("eye").addEventListener("click", function () {
if (pwShown == 0) {
pwShown = 1;
show();
} else {
pwShown = 0;
hide();
}
}, false);
<input type="password" placeholder="Password" id="pwd" class="masked" name="password" />
<button type="button" id="eye">
<img src="https://cdn0.iconfinder.com/data/icons/feather/96/eye-16.png" alt="eye" />
</button>
Der einfachste Weg ist die Verwendung einer Schaltfläche mit einem onclick
-Attribut, das den Typ der Eingabe umschaltet.
<input type="password" id="password" value="myPassword"/>
<button onclick="if (password.type == 'text') password.type = 'password';
else password.type = 'text';">toggle</button>
Sie brauchen keine zusätzliche "pwShown" -Variable, um zu entscheiden, ob Sie Text anzeigen oder ausblenden möchten. Sie müssen lediglich das Attribut "type" des Elements "pwd" wie folgt untersuchen:
JavaScript:
document.getElementById("eye").addEventListener("click", function(e){
var pwd = document.getElementById("pwd");
if(pwd.getAttribute("type")=="password"){
pwd.setAttribute("type","text");
} else {
pwd.setAttribute("type","password");
}
});
HTML:
<input type="password" placeholder="Password" id="pwd" class="masked" name="password" />
<button type="button" id="eye">
<img src="eye.png" alt="eye"/>
</button>
Führen Sie die folgenden Schritte aus: Laden Sie die unten angegebenen Bilder herunter. Machen Sie einen Ordner. Fügen Sie Ihre HTML-Datei und die Bilder im selben Ordner hinzu. Ersetzen Sie den Wert von "b.src" in Javascript sowie in Ihrem HTML-Code entsprechend.
function show() {
var a=document.getElementById("pwd");
var b=document.getElementById("EYE");
if (a.type=="password") {
a.type="text";
b.src="https://i.stack.imgur.com/waw4z.png";
}
else {
a.type="password";
b.src="https://i.stack.imgur.com/Oyk1g.png";
}
}
<input type="password" id="pwd">
<button onclick="show()"><img src="https://i.stack.imgur.com/Oyk1g.png" id="EYE"></button>
Die Variable "pwShown" ist im else-Abschnitt Ihres Javascript-Codes falsch geschrieben (als "pwShow"). Daher wird pwShown nie auf 0 zurückgesetzt.
Basierend auf dem, was Sie geschrieben haben, fügen Sie das Ereignis sowohl in HTML als auch in Javascript (in der Funktion showHide
) hinzu. Möglicherweise können Sie Ihren js-Code von dem, was Sie haben, ändern in:
function showHide()
{
var input = document.getElementById("pwd");
if (input.getAttribute("type") === "password") {
show();
} else {
hide();
}
}
JQuery-Lösung aus meinem Code: (nur die IDs ändern).
$(document).ready(function () {
$("#eye").click(function () {
if ($("#password").attr("type") === "password") {
$("#password").attr("type", "text");
} else {
$("#password").attr("type", "password");
}
});
});
Dies ist eine Verbesserung gegenüber Tunakis Antwort. Wir möchten nicht einmal prüfen, in welchem Zustand sich das Formularfeld bereits befindet, da dies vollständig vom Zustand der Maus bestimmt wird. Dadurch kann das Passwort nur vorübergehend angezeigt werden (nur solange die Maustaste über der Taste gedrückt wird.)
<html>
<head>
<title>Visible Password Test</title>
</head>
<body>
Password : <input type="password" name="password" id="password" />
<button type="button" id="eye" title="Did you enter your password correctly?"
onmousedown="password.type='text';"
onmouseup="password.type='password';"
onmouseout="password.type='password';">Peek at Password</button>
</body>
</html>
Wenn Sie in Ihrem Code die Funktion showHide () aufrufen, wird die Variable pwShown auf 0 gesetzt.
Sie müssen die Variable pwShown als globale Variable deklarieren.
var pwShown = 0;
function showHide()
{
...
}