【问题标题】:JavaScript: can an input type=checkbox use appendChild in IE8 or not?JavaScript:输入类型=复选框是否可以在 IE8 中使用 appendChild?
【发布时间】:2011-02-25 18:20:24
【问题描述】:

根据 http://msdn.microsoft.com/en-us/library/ms535934(v=VS.85).aspxhttp://msdn.microsoft.com/en-us/library/ms535262(v=VS.85).aspx ,我应该能够执行以下操作来创建一个新的复选框:

var answer = document.createElement('input');
answer.setAttribute('type', 'checkbox');
answer.setAttribute('id',   'answer');
answer.setAttribute('value', 'a');
answer.appendChild(document.createTextNode('test'));

这在 Firefox 和 Chrome 中有效,但在 IE 8 中,最后一个函数调用会产生以下错误消息:

Error: Unexpected call to method or property access.

我已经尝试通过使用 innerText 属性来绕过它,但是这种方法会收到相同的错误消息。

我做错了吗?如果是这样,是什么?如果没有,我该如何规避看似无稽之谈?

【问题讨论】:

  • > 这适用于 Firefox 和 Chrome O RLY?
  • 啊。多一点挖掘表明我阅读 HTML 表单示例有点太快了。输入的文本实际上并未包含在输入标签中。至少 Firefox 和 Chrome 没有在函数调用上报错……

标签: javascript dom internet-explorer-8 input appendchild


【解决方案1】:

我认为您不想在复选框中添加文本节点。相反,我会使用带有两个子节点的标签对象:复选框输入和文本节点:

var answer = document.createElement('input');
answer.setAttribute('type', 'checkbox');
answer.setAttribute('id',   'answer');
answer.setAttribute('value', 'a');
var answerLabel = document.createElement('label');
answerLabel.setAttribute('for','answer'); // this corresponds to the checkbox id
answerLabel.appendChild(answer);
answerLabel.appendChild(document.createTextNode(' test'));
document.body.appendChild(answerLabel);

【讨论】:

    【解决方案2】:

    你可以使用:

    var label = document.createElement('label');
    label.answer;
    label.appendChild(document.createTextNode('test'));
    

    【讨论】:

    • 感谢您的回答。它主要工作,但我不得不将中间行更改为“label.setAttribute('for', 'answer');”一路完成。
    • 奇怪...它应该在没有for 的情况下工作。比如看this
    猜你喜欢
    • 2011-06-14
    • 2012-12-08
    • 1970-01-01
    • 2010-12-02
    • 2015-03-27
    • 2022-12-04
    • 2015-09-01
    • 1970-01-01
    • 2019-05-06
    相关资源
    最近更新 更多