使用 JavaScript 动态创建复选框?

IT技术 javascript html checkbox
2021-03-09 02:20:59

我正在尝试使用以下 HTML/JavaScript 动态创建一个复选框。任何想法为什么它不起作用?

<div id="cb"></div>
<script type="text/javascript">
    var cbh = document.getElementById('cb');
    var val = '1';
    var cap = 'Jan';

    var cb = document.createElement('input');
    cb.type = 'checkbox';
    cbh.appendChild(cb);
    cb.name = val;
    cb.value = cap;
    cb.appendChild(document.createTextNode(cap));
</script>
4个回答

您正在尝试将文本节点放在输入元素中。

输入元素为空,不能有子元素。

...
var checkbox = document.createElement('input');
checkbox.type = "checkbox";
checkbox.name = "name";
checkbox.value = "value";
checkbox.id = "id";

var label = document.createElement('label')
label.htmlFor = "id";
label.appendChild(document.createTextNode('text for label after checkbox'));

container.appendChild(checkbox);
container.appendChild(label);
我想要标签内的复选框,但做 label.appendChild(checkbox) 对我不起作用——它把复选框放在标签外。你会怎么做?
2021-05-09 02:20:59
请注意,在某些版本的 IE 中,checkbox.checked 值不会保持不变,除非您在将控件附加到页面后对其进行设置。
2021-05-14 02:20:59

最后一行应该是

cbh.appendChild(document.createTextNode(cap));

将文本(标签?)附加到与复选框相同的容器,而不是复选框本身

您可以创建一个函数:

function changeInputType(oldObj, oTyp, nValue) {
  var newObject = document.createElement('input');
  newObject.type = oTyp;
  if(oldObj.size) newObject.size = oldObj.size;
  if(oldObj.value) newObject.value = nValue;
  if(oldObj.name) newObject.name = oldObj.name;
  if(oldObj.id) newObject.id = oldObj.id;
  if(oldObj.className) newObject.className = oldObj.className;
  oldObj.parentNode.replaceChild(newObject,oldObj);
  return newObject;
}

然后你打电话:

changeInputType(document.getElementById('DATE_RANGE_VALUE'), 'checkbox', 7);
   /* worked for me  */
     <div id="divid"> </div>
     <script type="text/javascript">
         var hold = document.getElementById("divid");
         var checkbox = document.createElement('input');
         checkbox.type = "checkbox";
         checkbox.name = "chkbox1";
         checkbox.id = "cbid";
         var label = document.createElement('label');
         var tn = document.createTextNode("Not A RoBot");
         label.htmlFor="cbid";
         label.appendChild(tn); 
         hold.appendChild(label);
         hold.appendChild(checkbox);
      </script>  
复选框中的“值”属性有点模糊。该链接提供了一些信息:developer.mozilla.org/en-US/docs/Web/HTML/Element/Input/...
2021-05-12 02:20:59
这是一个只有代码的答案,你能解释一下代码吗?它与现有答案有何不同?
2021-05-17 02:20:59