изменить тип ввода HTML с помощью JS? - PullRequest
30 голосов
/ 01 февраля 2012

Как сделать это через сам тег, изменить тип с текста на пароль

<input type='text' name='pass'  />

Можно ли вставить JS внутри самого тега ввода, чтобы изменить тип = 'текст' на тип = 'пароль'

Ответы [ 8 ]

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

Попробуйте:

<input id="hybrid" type="text" name="password" />

<script type="text/javascript">
    document.getElementById('hybrid').type = 'password';
</script>
11 голосов
/ 01 февраля 2012

Изменение type <input type=password> приводит к ошибке безопасности в некоторых браузерах (старые версии IE и Firefox).

Вам нужно будет создать новый элемент input, установить для него type тот, который вам нужен, и клонировать все остальные свойства из существующего.

Я делаю это в моем плагине-заполнителе jQuery: https://github.com/mathiasbynens/jquery-placeholder/blob/master/jquery.placeholder.js#L80-84

Для работы в Internet Explorer:

  • динамически создать новый элемент
  • скопировать свойства старого элемента в новый элемент
  • установить тип нового элемента на новый тип
  • заменить старый элемент новым

Приведенная ниже функция выполняет для вас вышеуказанные задачи:

<script>
function changeInputType(oldObject, oType) {
    var newObject = document.createElement('input');
    newObject.type = oType;
    if(oldObject.size) newObject.size = oldObject.size;
    if(oldObject.value) newObject.value = oldObject.value;
    if(oldObject.name) newObject.name = oldObject.name;
    if(oldObject.id) newObject.id = oldObject.id;
    if(oldObject.className) newObject.className = oldObject.className;
    oldObject.parentNode.replaceChild(newObject,oldObject);
    return newObject;
}
</script>
3 голосов
/ 30 сентября 2012

Вот что у меня есть для меня.

По сути, вы используете команды onfocus и onblur в теге для запуска соответствующего javascript. Это может быть так просто, как:

<span><input name="login_text_password" type="text" value="Password" onfocus="this.select(); this.setAttribute('type','password');" onblur="this.select(); this.setAttribute('type','text');" /></span>

Развитая версия этой базовой функциональности проверяет и очищает строку и возвращает введенный пароль обратно к исходному «паролю» в случае нулевого текстового поля:

    <script type="text/javascript">
        function password_set_attribute() {
            if (document.getElementsByName("login_text_password")[0].value.replace(/\s+/g, ' ') == "" || document.getElementsByName[0].value == null) {
                document.getElementsByName("login_text_password")[0].setAttribute('type','text')
                document.getElementsByName("login_text_password")[0].value = 'Password';
            }
            else {
                document.getElementsByName("login_text_password")[0].setAttribute('type','password')
            }
        }
    </script> 

Где HTML выглядит так:

<span><input name="login_text_password" class="roundCorners" type="text" value="Password" onfocus="this.select(); this.setAttribute('type','password');" onblur="password_set_attribute();" /></span>
0 голосов
/ 16 августа 2018

$(".show-pass").click(function (e) {
    e.preventDefault();
    var type = $("#signupform-password").attr('type');
    switch (type) {
        case 'password':
        {
            $("#signupform-password").attr('type', 'text');
            return;
        }
        case 'text':
        {
            $("#signupform-password").attr('type', 'password');
            return;
        }
    }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" name="password" class="show-pass">
0 голосов
/ 12 марта 2018

Да, вы даже можете изменить его, вызвав событие

<input type='text' name='pass'  onclick="(this.type='password')" />
0 голосов
/ 12 февраля 2014

Мне пришлось добавить «.value» в конец кода Evert, чтобы он заработал.

Также я объединил его с проверкой браузера, чтобы поле ввода type = "number" было изменено на type = "text" в Chrome, так как «formnovalidate» сейчас не работает.

if (navigator.userAgent.toLowerCase().indexOf('chrome') > -1)
    document.getElementById("input_id").attributes["type"].value = "text";
0 голосов
/ 01 февраля 2012

Это не поддерживается некоторыми браузерами (IE, если я помню), но в остальном работает:

document.getElementById("password-field").attributes["type"] = "password";

или

document.getElementById("password-field").attributes["type"] = "text";
0 голосов
/ 01 февраля 2012
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.or/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
<script type="text/javascript" language="javascript">
function changefield(){
    document.getElementById("passwordbox").innerHTML = "<input id=\"passwordfield\" type=\"password\" name=\"password-field\" title=\"Password\" tabindex=\"2\" />";
    document.getElementById("password-field".focus();
}
</script>
</head>

<body>
<div id="passwordbox">
<input id="password-field" type="text" name="password-field" title="Password"onfocus="changefield();" value="Password" tabindex="2" />
</div>
<input type="submit" name="submit" value="sign in" tabindex="3" />

</body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...