使用jQuery更改输入字段的类型

2022-08-30 01:11:08
$(document).ready(function() {
    // #login-box password field
    $('#password').attr('type', 'text');
    $('#password').val('Password');
});

这应该将输入字段(with )更改为普通文本字段,然后填写文本“密码”。#passwordid="password"typepassword

但是,它不起作用。为什么?

表格如下:

<form enctype="application/x-www-form-urlencoded" method="post" action="/auth/sign-in">
  <ol>
    <li>
      <div class="element">
        <input type="text" name="username" id="username" value="Prihlasovacie meno" class="input-text" />
      </div>
    </li>
    <li>
      <div class="element">
        <input type="password" name="password" id="password" value="" class="input-text" />
      </div>
    </li>
    <li class="button">
      <div class="button">
        <input type="submit" name="sign_in" id="sign_in" value="Prihlásiť" class="input-submit" />
      </div>
    </li>
  </ol>
</form>

答案 1

作为浏览器安全模型的一部分,此操作很可能被阻止。

编辑:确实,现在在Safari中测试,我得到了错误。type property cannot be changed

编辑2:这似乎是jQuery的直接错误。使用以下直接的 DOM 代码工作正常:

var pass = document.createElement('input');
pass.type = 'password';
document.body.appendChild(pass);
pass.type = 'text';
pass.value = 'Password';

编辑3:直接从jQuery源代码,这似乎与IE有关(可能是一个错误或安全模型的一部分,但jQuery并不具体):

// We can't allow the type property to be changed (since it causes problems in IE)
if ( name == "type" && jQuery.nodeName( elem, "input" ) && elem.parentNode )
    throw "type property can't be changed";

答案 2

一步到位解决方案

$('#password').get(0).type = 'text';