Visibility-Funktion geht nicht. Was ist falsch?
Auf meiner Website programmiere ich ein Loginsystem, bei dem ich eine "Visibility-Funktion" (show/hide password) implementiert habe.
Immer wenn ich auf das Icon klicke, soll es die Eigenschaft: "display: none" annehmen, das andere Icon einblenden und den input-Tag auf: type="password" setzen, damit man das Eingegebene sieht.
Der Wechsel zwischen den zwei Icons funktioniert prima. Leider ändert sich der Input type nicht. Ich habe irgendeinen Fehler im Sourcecode, nur finde ich diesen nicht.
HTML:
<div class="login_element password">
<i class="fa fa-lock password_lock" aria-hidden="true"></i>
<input type="password" placeholder="password*" class="inputpassword" />
<i class="fa fa-eye" id="show" aria-hidden="true" onclick="pwdvison()"></i>
<i class="fa fa-eye-slash" id="hide" aria-hidden="true" onclick="pwdvison()"></i>
</div>
JS:
<script type="text/javascript">
function pwdvison() {
var x = document.getElementsByClassName("inputpassword");
if (x.type === "password") {
x.type = "text";
document.getElementById('hide').style.display = "inline-block";
document.getElementById('show').style.display = "none";
}
else {
x.type = "password";
document.getElementById('hide').style.display = "none";
document.getElementById('show').style.display = "inline-block";
}
}
</script>
1 Antwort
Die getElementsByClassName-Methode liefert dir, wie es der Name an sich schon sagt, alle Elemente im Dokument, die die angegebene Klasse besitzen.
Das heißt, du bekommst in jedem Fall stets ein Array zurück. Da du am ersten Ergebnis interessiert bist, musst du dir dieses auch erst aus dem Array nehmen:
document.getElementsByClassName("inputpassword")[0];
Oder du verkürzt die Suche, indem du die querySelector-Methode einsetzt:
document.querySelector(".inputpassword");
Sie liefert stets nur den ersten Fund.