【问题标题】:Can I use JavaScript to set the 'name' attribute?我可以使用 JavaScript 设置“名称”属性吗?
【发布时间】:2010-11-24 15:40:24
【问题描述】:

根据SitePoint(和我自己的实验),“setAttribute()”的 IE 实现是错误且不可靠的。

同样根据SitePointname 属性是只读的。

还有其他方法可以在元素上设置name 属性吗?我需要这个与单选按钮一起使用。如果可能的话,我想要一个没有 jQuery 的解决方案,因为我目前没有使用该库。

提前致谢!

【问题讨论】:

  • 您的 SitePoint 引用指向 Attribute 对象的 name 属性而不是 HTMLInputELement 的 name 属性,您需要将鸡蛋与鸡蛋进行比较。

标签: javascript dom internet-explorer-7 cross-browser


【解决方案1】:

这对我有用

alert(document.getElementById('testInput').name);
document.getElementById('testInput').name = 'someName';
alert(document.getElementById('testInput').name);

<input type="radio" name="test" id="testInput" />

【讨论】:

  • 它部分有效。但是,它不会更改按钮所属的单选组,因此如果您在同一页面上有另一个名为 someName 的输入,它们将保持独立,并且如果您有另一个名为 test 的输入,它仍将与新的 someName 控件独占.此外,如果您尝试使用 getElementsByName 或 form.someName/form.elements.someName 检索“someName”,则 IE 无法找到它。可能还有更多像这样奇怪的交互;一般来说,最好避免。
【解决方案2】:

Sitepoint lies正在谈论“名称”的不同用法(参见 Anthony 的评论)。它不是只读的,只是存在一个长期存在的 IE 错误(最高 v7),在表单字段上设置“名称”仅部分有效。特别是单选按钮不能正确接受它。

微软认可的解决方案,as detailed here 是使用 IE 版本的 createElement 调用的一个可怕的错误功能来同时设置属性:

var radio= document.createElement('<input type="radio" name="test" value="a" />');

可能更好的方法就是使用好的旧的innerHTML,例如:

var div= document.createElement('div');
div.innerHTML= '<input type="radio" name="test" value="a" />';
var radio= div.firstChild;

【讨论】:

  • 这看起来像是将元素插入到 dom 中,而不是为我设置 name 属性。
  • 不能在 IE 中设置 name 属性。所以这会创建一个新的 radio 元素,如果你想要的话,你可以用它替换现有的 radio 元素。你可以在原始收音机的父级上设置innerHTML,如果那是你所追求的;问题中没有足够的信息可以说。
  • 这似乎是在 IE 中执行此操作的唯一可靠方法);
【解决方案3】:

为什么不使用setAttribute("name", yourValue) 它工作得很好。

【讨论】:

    【解决方案4】:

    您是否尝试过简单地为元素 name 属性分配一个新名称?我不确定它是如何跨浏览器的,但它适用于任何支持 DOM 级别 1 的东西。

    我不确定您为什么要使用 setAttribute 来执行此操作?

    【讨论】:

    • 我发布了一些这样的代码并为我工作。如果我能先看到这个答案,我就不会发布它。
    【解决方案5】:

    name 属性对于输入元素不是只读的。

    the spec

    【讨论】:

      【解决方案6】:

      查看W3C DOM Compatibility - Core,您可以尝试使用 setAttributeNode() 而不是 setAttribute()。它可能适用于 IE 6 及更高版本。

      【讨论】:

        【解决方案7】:

        IE DOM 不允许我在运行时更改名称属性。但是,使用 jQuery 来更新 name 属性适用于 IE。我在IE9上测试过。 例如,

        <input id="ID0E2B" name="Field2" value="3" type="radio" />
        $("#ID0E2B").attr("name", newName);
        

        【讨论】:

        • 而jQuery是如何做到的?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-07-08
        • 1970-01-01
        • 2018-02-22
        • 2012-06-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多