2012-07-04 47 views
0

我有以下功能。它從複選框中獲取值並將其傳送到文本框。它正在工作......但只有當表單有2個或更多複選框時纔有效。Javascript:檢測複選框不適用於僅有1個複選框的表單。使用2個或更多

<script type="text/javascript"> 
    function sendValue() 
    { 
     var all_values = ''; 
     boxes = document.DataRequest.itens.length 

      for (i = 0; i < boxes; i++) 
      { 
       if (document.DataRequest.itens[i].checked) 
       { 
        all_values = all_values + document.DataRequest.itens[i].value + "," 

       } 
      } 

     window.opener.document.getElementById('emailto').value = all_values; 
     self.close(); 
    } 
</script> 

<form name="DataRequest"> 
    <input name="itens" type="checkbox" value="name1"> 
    <input name="itens" type="checkbox" value="name2"> 
</form> 

我錯過了什麼使這個工作只有1複選框?先謝謝了。

+5

請勿爲2個複選框指定相同的名稱。 –

+2

如果有多個複選框,'document.DataRequest.itens'只是類似數組。否則,它只返回元素。 – Esailija

+0

@Esailija你應該寫一個答案,我想。 –

回答

0

當有一個項目。它不會返回數組

​​
+0

謝謝!它做了這項工作。 – Khrys

0

首先,你需要你的投入給予不同的名稱:

<form name="DataRequest"> 
    <input name="item1" type="checkbox" value="name1"> 
    <input name="item2" type="checkbox" value="name2"> 
</form> 

使用相同的名稱,你的投入在技術上是可能的,你的情況,但可怕的實踐爲名稱通常是表示不同輸入的標識。

然後,要訪問您的輸入,您必須使用不同的語法。不止一個版本是可能的,但你可以這樣做:

var boxes = document.forms['DataRequest'].getElementsByTagName('input'); 
var tokens = []; 
for (var i=0; i<boxes.length; i++) { 
    if (boxes[i].checked) tokens.push(boxes[i].name+'='+boxes[i].value); 
} 
var all_values = tokens.join(','); 

注意的是,使用join避免後面的逗號。

+0

感謝代碼,但我使用相同的輸入名稱做另一個檢查...在這種情況下,我必須使用這種方式。我非常感謝你在這方面的有益時間。 – Khrys

0

不知道你是多麼的兼容性需要IE 6 - 8,但如果不是必需的,你可以使用

function serializeChecked() { 
    var values = []; 
    var checked_boxes = document.querySelectorAll('form[name="DataRequest"] input[checked]'); 
    for (var i = 0, l = checked_boxes.length; i < l; i++) { 
    values.push(checked_boxes[i].getAtrribute('value')) 
    } 
    return values.join(','); 
} 


function sendValue() { 
    window.opener.document.getElementById('emailto').value = serializeChecked(); 
} 

如果你確實需要IE瀏覽器的支持,使用document.DataRequest.getElementsByTagName(「輸入」)而不是QSA並遍歷它們以收集具有checked屬性的值。

相關問題