2011-02-28 86 views
1

我有這樣的代碼,選擇所有複選框:改變了JavaScript,請選擇複選框

<html> 
<head> 
<script language="javascript"> 
function checkAll(){ 
    for (var i=0;i<document.forms[0].elements.length;i++) 
    { 
     var e=document.forms[0].elements[i]; 
     if ((e.name != 'allbox') && (e.type=='checkbox')) 
     { 
      e.checked=document.forms[0].allbox.checked; 
     } 
    } 
} 
</script> 
</head> 

<body> 
    <form> 
    <input type="checkbox" value="on" name="allbox" onclick="checkAll();"/> Check all<br /> 
    <h3>Fruit</h3> 
    <input type="checkbox" value="on" name="oranges" /> Oranges<br/> 
    <input type="checkbox" value="on" name="bananas" /> Bananas<br/> 
    </form> 
</body> 
</html> 

我應該如何改變(以及它是如何改變的邏輯)的JavaScript,它會在這種情況下工作:

<body> 
    <form id="menu"> 
     <input type="checkbox" value="on" name="allbox" onclick="checkAll();"/> Check all<br /> 
    </form> 
    <h3>Fruit</h3> 
    <form id="select"> 
     <input type="checkbox" value="on" name="oranges" /> Oranges<br/> 
     <input type="checkbox" value="on" name="bananas" /> Bananas<br/> 
    </form> 
</body> 

回答

1

第二個例子中有兩種形式。

在JavaScript中,你有各種形式的文檔中的數組:document.forms

數組在JavaScript是從零開始,所以第一種形式與forms[0]訪問,第二與forms[1]等。

由於您示例中的複選框位於第二個窗體上,因此只需更改JavaScript以訪問第二窗體中的元素。

... 
    for (var i=0;i<document.forms[1].elements.length;i++) 
    { 
     var e=document.forms[1].elements[i]; 
... 

或者是因爲你的第二個形式都有一個ID,就可以通過ID這樣的訪問:

... 
for(var i=0;i<document.getElementById("select").elements.length;i++) 
{ 
    var e=document.getElementById("select").elements[i]; 
... 
+0

是否有可能通過ID或類或別的東西,是指形成[1]我可以設置,以改變它仍然會工作的地方? – JackLeo 2011-02-28 10:09:50

+0

是的,你可以添加一個id到表單,然後用'document.getElementById(「formId」)來訪問它' – Greg 2011-02-28 10:10:42

+0

那麼'if'語句怎麼樣? – JackLeo 2011-02-28 10:21:22

0

第二頁上有兩種形式,但腳本只引用一種形式。你不需要將你的表格分成兩部分(從你現在的代碼判斷)。

但如果你想保留兩種形式,這是可能的。在您的腳本中隨處替換document.forms[0]document.forms[1]