通过JS更改html输入类型?

时间:2012-02-01 10:07:14

标签: javascript html input

如何通过标签本身来做到这一点 将类型从文本更改为密码

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

是否可以在输入标记本身中插入JS以将type ='text'更改为type ='password'?

8 个答案:

答案 0 :(得分:21)

尝试:

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

<script type="text/javascript">
    document.getElementById('hybrid').type = 'password';
</script>

答案 1 :(得分:11)

更改type的{​​{1}}会在某些浏览器(旧的IE和Firefox版本)中引发安全性错误。

您需要创建一个新的<input type=password>元素,将其input设置为您想要的元素,然后从现有元素中克隆所有其他属性。

我在我的jQuery占位符插件中执行此操作:https://github.com/mathiasbynens/jquery-placeholder/blob/master/jquery.placeholder.js#L80-84

要在Internet Explorer中工作:

  • 动态创建新元素
  • 将旧元素的属性复制到新元素
  • 将新元素的类型设置为新类型
  • 用新元素替换旧元素

以下功能为您完成上述任务:

type

答案 2 :(得分:3)

这是我对我的所有。

基本上,您正在使用标记中的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>

答案 3 :(得分:0)

<!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>

答案 4 :(得分:0)

某些浏览器不支持这种情况(如果我记得的话,我会使用IE浏览器),但它可以在其余浏览器中使用:

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

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

答案 5 :(得分:0)

我必须在Evert代码的末尾添加一个'.value'才能使其正常工作。

此外,我将它与浏览器检查相结合,以便输入类型=“数字”字段在Chrome中更改为type =“text”,因为'formnovalidate'现在似乎不起作用。

if (navigator.userAgent.toLowerCase().indexOf('chrome') > -1)
    document.getElementById("input_id").attributes["type"].value = "text";

答案 6 :(得分:0)

是的,你甚至可以通过触发事件来改变它

<input type='text' name='pass'  onclick="(this.type='password')" />

答案 7 :(得分:0)

$(".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">