2012-01-26 73 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; 
     }); 

    }); 
}); 

當然,對於完整的瀏覽器支持,你需要修改這個代碼位。

相關問題