2

私はこのように見える私のページにいくつかのチェックボックスを追加するPHPのループを持っています

<input type="checkbox" name="checkbox[]">

javascript を使用して、チェックされているものを確認し、配列に値を追加したい

var cboxes = document.getElementsByName('checkbox[]');
var len = cboxes.length;
var imageArray = new Array();

for (var i = 0; i < len; i++) {
    if (cboxes[i].checked) {
        imageArray[i] = cboxes[i].value;
    } 
}

50 個のボックスがあり、チェックボックス番号 2、4、および 6 をクリックすると、配列がループし、結果が得られます。

for(var i = 0; i < imageArray.length; i++){
    gallery.innerHTML += imageArray[i] + "<br>";
}

--

undefined
Correct value
undefined
Correct value
undefined
Correct value

番号1、2、3をチェックすると、結果が得られます

Correct value
Correct value
Correct value

チェックボックスをスキップすると undefined になるのはなぜですか? どうすれば修正できますか

4

5 に答える 5

6

これは、配列に余分な要素を追加しているためです。たとえば、次のコードを見てください。

var a = []; // empty array
a[1] = 'foo'; // don't set a[0]

console.log(a.length); // gives 2

Javascript は、配列キーのリストのギャップを常に「埋めます」。一部を見逃した場合、Javascript は空欄を で埋めundefinedます。

キー名で要素を配列に追加するのではなく、push配列の最後に追加します。

imageArray.push(cboxes[i].value);
于 2013-11-06T09:18:52.973 に答える
0

対応するチェックボックスがチェックされている場合にimageArray[i] のみの値を設定しているためです。チェックボックス 2、4、および 6 をオンにすると、基本的に次のようになります。

imageArray[1] = cboxes[1].value;
imageArray[3] = cboxes[3].value;
imageArray[5] = cboxes[5].value;

imageArray[0][2]および[4]設定されることはありませんundefined

これを修正するには、 を使用push()して値を にプッシュするimageArrayか、単純に一致しないキーにダミーの値を設定します。

    for (var i = 0; i < len; i++) {
        if (cboxes[i].checked) {
            imageArray[i] = cboxes[i].value;
        } else {
            imageArray[i] = "";
        }
    }

結果:

imageArray[0] = "";
imageArray[1] = cboxes[1].value;
imageArray[2] = "";
imageArray[3] = cboxes[3].value;
imageArray[4] = "";
imageArray[5] = cboxes[5].value;

または、次を使用しpush()ます。

    for (var i = 0; i < len; i++) {
        if (cboxes[i].checked) {
            imageArray.push(cboxes[i].value);
        }
    }

結果:

imageArray[0] = cboxes[1].value;
imageArray[1] = cboxes[3].value;
imageArray[2] = cboxes[5].value;
于 2013-11-06T09:19:35.837 に答える
0

これを試して

var cboxes = document.getElementsByName('checkbox[]');
var imageArray =[];

for (var i = 0, len = cboxes.length ; i < len; i++) {
    if (cboxes[i].checked) {
        imageArray.push(cboxes[i].value );
    } 
}
于 2013-11-06T09:20:04.370 に答える
0

でインデックスをスキップしているため、 undefined になりますimageArray。最初のチェックボックスがチェックされていない場合、インデックス 0 には何も配置されず、2 番目のチェックボックスがチェックされているため、最初のエントリはインデックス 1 に配置されます。

反復すると、後に値を持つインデックスがある場合、それらの欠落したインデックスはスキップされません。値が設定されていないため、 として返されundefinedます。

この行を変更できます:

imageArray[i] = cboxes[i].value;

に:

imageArray.push(cboxes[i].value);

そうすれば、チェックされていないチェックボックスがある場合にインデックスをスキップしません。

于 2013-11-06T09:18:40.740 に答える