2012-01-26 48 views
0

我使用appendchild方法创建表。它们包含复选框。我希望能够让用户点击一个复选框并让它运行一个函数。我需要该功能来访问其他复选框,看看它是否被选中。目前,我似乎可以参考表格或复选框。 我创建表的代码是:从appendchild创建的Javascript引用元素?

function makeTable() { 
    var ItemA = Item.ItemName.options[Item.ItemName.options.selectedIndex].text; 
    var myParagraph=document.getElementById("myLine"); 
    myForm = document.createElement("FORM"); 
    mytable = document.createElement("TABLE"); 
    mytablebody = document.createElement("TBODY"); 

      var CB_Format = document.createElement('input'); 
      CB_Format.type = 'checkbox'; 
      CB_Format.name= "CB_Test"; 
      CB_Format.value= 1; 
      CB_Format.setAttribute("name", "CBTest2"); 
      CB_Format.onclick = changeColor; 
      theCell.appendChild(CB_Format); 

      var CB_Delete = document.createElement('input'); 
      CB_Delete.type = "checkbox"; 
      CB_Delete.name = "CB_Test"; 
      CB_Delete.setAttribute("name", "CBTest2"); 
      CB_Delete.value = 2; 
      CB_Delete.onclick = answer; 
      theCell.appendChild(CB_Delete); 

我的理解是,我的解决方案应尽可能警报(document.form.checkbox.checked),但无论是可能的名字是什么组合一样简单我尝试,我得到了错误,它是无效的或不是ie8和firefox中的对象。 感谢您的帮助

回答

1
> function makeTable() { 
>  var ItemA = Item.ItemName.options[Item.ItemName.options.selectedIndex].text; 
>  var myParagraph=document.getElementById("myLine"); 
>  myForm = document.createElement("FORM"); 
>  mytable = document.createElement("TABLE"); 
>  mytablebody = document.createElement("TBODY"); 

如果你不VAR声明变量,就成为全局变量首先评估时。总是声明变量。

>   var CB_Format = document.createElement('input'); 
>   CB_Format.type = 'checkbox'; 
>   CB_Format.name= "CB_Test"; 
>   CB_Format.value= 1; 
>   CB_Format.setAttribute("name", "CBTest2"); 

上面的这行代码改变了前面几行分配的值的属性,为什么两者都是?只要正确的值赋给name属性一次:

CB_Format.name = "CBTest2"; 

这同样适用于使用的setAttribute的以后。请注意,设置一个属性的值通常不会更改在一些浏览器相关的属性,因此总是使用性能,除非有使用的setAttribute一个具体的理由,

[...]

我的理解是,我的解决方案应为 警报(document.form.checkbox.checked),但无论我尝试什么样的组合可能的名字 我得到的错误,这是空或不是 对象一样简单ie8和firefox。感谢您的帮助

表单控件可用作表单元素的命名属性。如果有多个控件具有相同的名称,则它们在共享中。将不同的值分配给名称属性和属性需要麻烦。它应该是第二个指配覆盖第一个,但毫无疑问,有一个浏览器将保持两个值(一个用于属性,另一个用于属性)。

简单的解决方案是始终使用属性,只分配一个值。如果你想要的名字是CBTest2(因为这是分配的第二个),然后当输入被添加到形式和格式的文档,将可作为:

document.forms['formName'].elements['CBTest2'] 

如果名有效标识符,则简写点符号可以使用:

document.formName.CBTest2 

既然你有一个同名两个元素,返回值将是一个集合(有点像数组),这样得到的第一个,使用:

document.formName.CBTest2[0] 
0

你可以使用类似的一些代码...

var checkboxes = document.querySelectorAll('#some-form input[type="checkbox"]'); 

Array.forEach(checkboxes, function(checkbox) { 
    checkbox.addEventListener(function() { 

     var hasOtherCheckedCheckbox = Array.every(checkboxes, function(checkbox) { 
      return checkbox.checked; 
     }); 

    }); 
}); 

当然,对于完整的浏览器支持,你需要修改这个代码位。

相关问题