Когда пользователь нажимает Показать ссылку, отображает пароль, скрывает его при повторном нажатии - PullRequest
16 голосов
/ 23 февраля 2012

Я пытаюсь заставить этот простой скрипт работать. По сути, когда пользователь нажимает на ссылку Показать, он отображает пароль в текстовом поле пароля и скрывает его при повторном нажатии. Я искал решения, но не мог найти то, что мне нужно. Вот код:

JavaScript

    function toggle_password(target){
    var tag = getElementById(target);
    var tag2 = getElementById("showhide");
    if (tag2.innerHTML == 'Show'){
        tag.setAttribute('type', 'text');   
        tag2.innerHTML = 'Hide';
    }
    else{
        tag.setAttribute('type', 'password');   
        tag2.innerHTML = 'Show';
    }

    }

HTML

<label for="pwd0">Password:</label>
<input type="password" value="####" name="password" id="pwd0" />
<a href="#" onclick="toggle_password('pwd0');" id="showhide">Show</a>

Когда я нажимаю на ссылку, ничего не происходит. Я проверил это без использования оператора if и все еще ничего не сделал.

Ответы [ 11 ]

14 голосов
/ 23 февраля 2012

вы не использовали document для getElementById

function toggle_password(target){
    var d = document;
    var tag = d.getElementById(target);
    var tag2 = d.getElementById("showhide");

    if (tag2.innerHTML == 'Show'){
        tag.setAttribute('type', 'text');   
        tag2.innerHTML = 'Hide';

    } else {
        tag.setAttribute('type', 'password');   
        tag2.innerHTML = 'Show';
    }
}

ваши id имена запрещены и с ними трудно работать: pwd'.$x.' у вас не может быть некоторых из этих символов.

Спецификация HTML 4.01 гласит, что токены ID должны начинаться с буквы ([A-Za-z]) и могут сопровождаться любым количеством букв, цифр ([0-9]), дефисов (-), подчеркиваний (_), двоеточия (:) и точки (.).

также, этот метод не будет работать во всех браузерах, например, в IE <9 вы можете изменить <code>.type только до того, как элемент будет прикреплен к документу

попробуйте поменять их местами:

function swapInput(tag, type) {
  var el = document.createElement('input');
  el.id = tag.id;
  el.type = type;
  el.name = tag.name;
  el.value = tag.value; 
  tag.parentNode.insertBefore(el, tag);
  tag.parentNode.removeChild(tag);
}

function toggle_password(target){
    var d = document;
    var tag = d.getElementById(target);
    var tag2 = d.getElementById("showhide");

    if (tag2.innerHTML == 'Show'){

        swapInput(tag, 'text');
        tag2.innerHTML = 'Hide';

    } else {
        swapInput(tag, 'password');   
        tag2.innerHTML = 'Show';
    }
}

надеюсь, это поможет -ck

5 голосов
/ 04 апреля 2015

Вот пример использования jQuery ( pastebin ):

$(document).ready(function() {
  $("#showHide").click(function() {
    if ($(".password").attr("type") == "password") {
      $(".password").attr("type", "text");

    } else {
      $(".password").attr("type", "password");
    }
  });
});
#showHide {
  width: 15px;
  height: 15px;
  float: left;
}
#showHideLabel {
  float: left;
  padding-left: 5px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<table>
  <tr>
    <td>Password:</td>
    <td>
      <input type="password" name="password" class="password" size="25">
    </td>
  </tr>
  <tr>
    <td></td>
    <td>
      <input type="checkbox" id="showHide" />
      <label for="showHide" id="showHideLabel">Show Password</label>
    </td>
  </tr>
</table>

Источники:

http://www.voidtricks.com/password-show-hide-checkbox-click/

Как согласовать флажки и их метки последовательно в кросс-браузерах

2 голосов
/ 23 февраля 2012

По соображениям безопасности вы не можете изменить тип элемента ввода. Вы должны заменить весь элемент новым.

1 голос
/ 04 ноября 2017

Вы можете использовать встроенный скрипт для простой реализации показать / скрыть пароль.

   

 <form>
    <input 
    onmouseover="this.setAttribute('type','text')"               
    onmouseout="this.setAttribute('type','password')" 
    placeholder="Hover to show password!" 
    type="password" 
    name="password-login"
    id="password-login"
    >
    </form>   
1 голос
/ 06 июня 2017

http://www.voidtricks.com/password-show-hide-checkbox-click/ Это простое руководство, чтобы показать пароль в поле ввода, когда флажок установлен, и скрыть его, когда флажок снят с помощью jQuery.

Javascript

<script type="text/javascript">
 $(document).ready(function () {
 $("#showHide").click(function () {
 if ($(".password").attr("type")=="password") {
 $(".password").attr("type", "text");
 }
 else{
 $(".password").attr("type", "password");
 }

 });
 });
</script>

<!-- language: lang-html -->

HTML *

<input type="password" class="password"><br>
    <input type="checkbox" id="showHide"> Show?

* У нас есть поле ввода пароля с классом «пароль» и флажок с идентификатором «showHide»

Простое решение для отображения / скрытия пароля с помощью флажков, и это просто уровень копирования / вставки. СДЕЛАННЫЙ !!! ; -)

1 голос
/ 03 октября 2014

Его действительно легко достичь ... Я нашел это сообщение в блоге , которое описывает способ сделать это с помощью нескольких строк кода. Я думаю, что не стоит сохранять такую ​​опцию, потому что к паролям нужно относиться серьезно.

вот код с этой страницы; он использует тот же подход, который вы описали. но использует флажок. И практически я видел, что он указывает в oss ', как Linux. они даже не оставляют следов от пароля со звездочкой (но, что делает пользовательский интерфейс, не знают, что они действительно заботятся о конфиденциальности pw, или им трудно делать это в командной строке ;-))

var textbox_elem = document.getElementById("password");
    if(check_box.checked)
    textbox_elem.setAttribute("type", "text");
    else
    textbox_elem.setAttribute("type", "password");
0 голосов
/ 04 апреля 2019

Я полагаю, что это то, что вы хотели:

function toggle_password(){
  var d = document;
  var tag = d.getElementById("pwd");
  var tag2 = d.getElementById("showhide");
  if (tag2.innerHTML == 'Show'){
    tag.setAttribute('type', 'text');
    tag2.innerHTML = 'Hide';
  } else {
    tag.setAttribute('type', 'password');
    tag2.innerHTML = 'Show';
  }
}
#input_field{
  margin:25px;
  padding:25px;
  border:5px solid black;
}
<html>
<head>
</head>
<body>
 <div id="input_field">
  <label for="pwd">Password:</label>
  <input type="password" value="" name="password" id="pwd" />
  <a href="#" onclick="toggle_password();"                         
  id="showhide">Show</a>
 <div>
</body>
</html>
0 голосов
/ 21 февраля 2018

Хотя на вопрос все еще есть ответ, я все еще публикую этот ответ.

    function toggle_password () {
    var tag = document.getElementById("pwd0");
    var tag2 = document.getElementById("showhide");
    if (tag2.innerHTML == 'Show'){
        tag.type="text";   
        tag2.innerText = 'Hide';
    }
    else {
        tag.type="password";   
        tag2.innerText = 'Show';
    }

    }
<label for="pwd0">Password:</label>
<input type="password" value="####" name="password" id="pwd0" />
<a href="#" onclick="toggle_password();" id="showhide">Show</a>
0 голосов
/ 17 августа 2015

Не меняйте тип ввода, меняйте размер текста.Сделайте это очень маленьким для Hide.

0 голосов
/ 13 августа 2015

Ваше решение может быть

function toggle_pass(){
    var pass = document.getElementById('showhide').innerHTML;
        if(pass=="show")
         {
            document.getElementById('pwd0').type = "text";
            pass= "Hide";
         }
        else
         {
            document.getElementById('pwd0').type = "password";
            pass = "Show Password";
         }
}
...