jQuery更改输入类型

时间:2010-08-22 12:42:53

标签: jquery attributes

尝试将input类型属性从password更改为text

$('.form').find('input:password').attr({type:"text"});

为什么这不起作用?

10 个答案:

答案 0 :(得分:51)

你不能用jQuery,it explicitly forbids it来做这件事,因为IE不支持它(检查你的控制台你会看到错误。

您必须删除输入并创建一个新输入,如果这是您所追求的,例如:

$('.form').find('input:password').each(function() {
   $("<input type='text' />").attr({ name: this.name, value: this.value }).insertBefore(this);
}).remove();

You can give it a try here

要明确限制,jQuery将不允许在type<button>上更改<input>,因此行为是跨浏览器一致的(因为IE不允许它,他们认为它无处不在。尝试时,您将在控制台中收到此错误:

  

错误:无法更改类型属性

答案 1 :(得分:48)

我的解决方案:

    $('#myinput').clone().attr('type','tel').insertAfter('#myinput').prev().remove();

答案 2 :(得分:10)

我知道我的游戏有点迟了,但我只能在IE9中做到这一点(似乎微软决定允许它?)。但是,我必须使用直接的JavaScript。这只是一个带有下拉列表的表单示例,该下拉列表会根据下拉列表中的内容更改字段类型。

function switchSearchFieldType(toPassword) {
    $('#SearchFieldText').val('');
    if (toPassword === true) {
        $('#SearchFieldText').get(0).setAttribute('type', 'password');
    } else {
        $('#SearchFieldText').get(0).setAttribute('type', 'text');
    }
}

$('#SelectedDropDownValue').change(function () {
    if ($("select option:selected").val() === 'password') {
        switchSearchFieldType(true);
    }
    else {
        switchSearchFieldType(false);
    }
}).change();

答案 3 :(得分:10)

USE prop代替attr

$('.form').find('input:password').prop({type:"text"});

答案 4 :(得分:7)

这应该很容易。

main

答案 5 :(得分:3)

它是2018年,jQuery现在支持这个功能。以下内容适用:

$('.form').find('input:password').attr("type","text");

答案 6 :(得分:0)

这里有两个函数,接受一个选择器数组作为一个参数来完成这个:

  // Turn input into Number keyboard
  function inputNumber(numArr) {
    if (numArr instanceof Array) {
      for (var i = 0; i < numArr.length; i++) {
        if ($(numArr[i]).length > 0) {
          var copy = $(numArr[i]);
          var numEle = copy.clone();
          numEle.attr("type", "number");
          numEle.insertBefore(copy);
          copy.remove();
        }
      }
    }
  }
  // Turn input into Email keyboard 
  function inputEmail(emailArr) {
    if (emailArr instanceof Array) {
      for (var i = 0; i < emailArr.length; i++) {
        if ($(emailArr[i]).length > 0) {            
          var copy = $(emailArr[i]);
          var numEle = copy.clone();
          numEle.attr("type", "number");
          numEle.insertBefore(copy);
          copy.remove();
        }
      }
    }
  }

然后您可以使用它:

  var numberArr = ["#some-input-id", "#another-input-id"];
  var emailArr = ["#some-input-id", "#another-input-id"];

  inputNumber(numberArr);
  inputEmail(emailArr);

答案 7 :(得分:0)

function passShowHide(){
  if( $("#YourCheckBoxID").prop('checked') ){
    document.getElementById("EnterPass").attributes["type"].value = "text";
  }
  else{
    document.getElementById("EnterPass").attributes["type"].value="password";}

答案 8 :(得分:0)

这很容易。这很好用。

 $('#btn_showHide').on('click', function() {
    if($(this).text() == 'Show')
    {
      $(this).text('Hide');
      $('#code').attr('type', 'text');
    }
    else
    {
      $(this).text('Show');
      $('#code').attr('type', 'password');
    }
  });

答案 9 :(得分:0)

    //Get current input object
    var oldInput = $('foo');
    //Clone a new input object from it
    var newInput = oldInput.clone();
    //Set the new object's type property
    newInput.prop('type','text');
    //Replace the old input object with the new one.
    oldInput.replaceWith(newInput);