3

以下のチェックボックスがあり、それらを配列値として取得する必要があります。

<input type="checkbox" id="contact_id" value="4" />
<input type="checkbox" id="contact_id" value="3" />
<input type="checkbox" id="contact_id" value="1" />
<input type="checkbox" id="contact_id" value="5" />

以下のように、それらを配列として 1 つの ajax リクエストに渡す必要があります。

xmlHttp.open("POST","?action=contact&contact_id=" +contacts,true);

この関数を使用して値を取得していますが、値を配列として関数に渡すことができません。このよう4,3,1,5.に渡されると、このように渡す必要があります

contact_id[]=4&contact_id[]=3&contact_id[]=1&contact_id[]=5

私はこれを次のようにしました

function getContacts(){
            var contacts = document.myform.contact_id, ids = [];
            for (var i = 0; i < contacts.length; i += 1){
                if (contacts[i].checked)
                     ids.push(contacts[i].value);
            }
            return ids;
        }
4

3 に答える 3

3

http://jsfiddle.net/xQezt/

このフィドルはあなたが望むことをしますか? シリアライゼーションは簡単ではありませんが、別の場所で、または Zepto、jQuery、YUI などのフレームワークを使用して、正確に行う適切な方法を見つけることができます。

まず、データを「提出」する方法を作りました。出力はコンソールに送られるので、firebug を開きます。どこにでも行けるけど。

//submit event registration
submitButton.onclick = function () {
    var contactArray = inputsToArray(contacts.children);
    var data = serializeArray(contactArray, 'contact_id[]');
    console.log(data);
}

次に、メソッド「getContacts」をより一般的なものにしました。

function inputsToArray (inputs) {
    var arr = [];
    for (var i = 0; i < inputs.length; i++) {
        if (inputs[i].checked)
            arr.push(inputs[i].value);
    }
    return arr;
}

これが単純なシリアライゼーション関数です。これがすべてのケースでうまくいくとは思わないので、適切なシリアライゼーション アルゴをどこから取得するかについて調査する必要があります。

function serializeArray (array, name) {
    var serialized = '';
    for(var i = 0, j = array.length; i < j; i++) {
        if(i>0) serialized += '&';
        serialized += name + '=' + array[i];
    }
    return serialized;
}

また、HTML を少し変更しました。

<div id="contacts">
<input type="checkbox" value="4" />
<input type="checkbox" value="3" />
<input type="checkbox" value="1" />
<input type="checkbox" value="5" />
</div>

<button id="submit">Submit</button>

これにより、次のように DOM をクエリできます。

var d=document;
var submitButton = d.getElementById('submit');
var contacts = d.getElementById('contacts');
于 2012-08-03T07:56:42.960 に答える
1

入力の ID が重複しています。IDの代わりに名前を使用することをお勧めします

たとえば、HTML は次のようになります。

<form id='contactform'>
<input type="checkbox" name="contact[]" value="4" />
<input type="checkbox" name="contact[]" value="3" />
<input type="checkbox" name="contact[]" value="1" />
<input type="checkbox" name="contact[]" value="5" />
</form>​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​

次に、値をクエリ文字列に取得する場合は、JQuery Serializeを使用します

$('#contactform').serialize(); 
// this will take some thing like this, Example check the second and the fourth
// contact%5B%5D=3&contact%5B%5D=5 

jsFiddle : http://jsfiddle.net/Eqb7f/

于 2012-08-03T08:07:26.667 に答える