0

私は以下の機能を持っています。チェックボックスから値を取得し、テキストボックスに転送します。機能しています...ただし、フォームに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つのチェックボックスだけでこれを機能させるために何か不足していますか?

4

3 に答える 3

0

アイテムが1つある場合。配列を返しません

  function sendValue()
    {
        var all_values = '';
        boxes = document.DataRequest.itens.length
            if(boxes>1)
            {
            for (i = 0; i < boxes; i++)
            {
                if (document.DataRequest.itens[i].checked)
                {
                    all_values = all_values + document.DataRequest.itens[i].value + ","

                }
            }
            }
           else
             {
              if (document.DataRequest.itens.checked)
                {
                    all_values = document.DataRequest.itens.value 

                }
             }

        window.opener.document.getElementById('emailto').value = all_values;
        self.close();
    }
于 2012-07-04T17:41:38.487 に答える
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を使用すると、末尾のコンマが回避されることに注意してください。

于 2012-07-04T17:44:44.903 に答える
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 のサポートが必要な場合は、QSA の代わりに document.DataRequest.getElementsByTagName('input') を使用し、checked 属性がある場合はそれらを反復処理して値を収集します。

于 2012-07-04T17:54:01.957 に答える