Javascript在IE9中不起作用

时间:2012-10-31 22:10:44

标签: javascript internet-explorer-9

以下javascript在IE9中不起作用,但在Firefox中运行良好。不知道怎么解决这个问题? THX。

var element = e.srcElement || e.target;

if(element != null){
   if(element.tagName == "INPUT") {

   //alert("Before: " + element.getAttribute("type"));
   element.setAttribute("type", "password");
   //alert("After: " + element.getAttribute("type"));

  }
}

2 个答案:

答案 0 :(得分:2)

以下是几点说明:

 // ------------v---favor e.target
var element = e.target || e.srcElement;

// -----v---simple truthy test
if (element){
  // ------------v---------v---- use nodeName, and toUpperCase() for safety
    if (element.nodeName.toUpperCase() == "INPUT") {

           // Not all IE respects the changing of the "type" on an input
        element.setAttribute("type", "password");

    } 
}

我认为IE9中的tagName表示可能已更改。使用nodeName 应该保证大写字符,但是有一些难得的错误要避免,所以我们使用toUpperCase()

过去,IE不允许更改"type"元素的input。如果在IE9中仍然存在这种情况,那就不会生育,但IE8及更低版本肯定不允许这样做。

答案 1 :(得分:2)

由于我发现一个合理的解决方案是用新的元素替换元素,你可以使用这样的东西:

var input = element;
var input2 = input.cloneNode(false);
input2.type = "password";
input.parentNode.replaceChild(input2, input);

在此处找到http://bytes.com/topic/javascript/answers/705445-dynamically-change-input-type-text-password并稍作修改。另一个解决方案是使用createElement而不是克隆,但这可能需要更多的工作。

编辑:

忘记提到问题似乎是IE不喜欢在元素被包含在DOM中之后动态地更改元素的type属性。