0

チェックボックスの名前と値のオブジェクトを取得しようとしています。次のフォームがあるとします。

<form>
<input type="checkbox" name="email" />
<input type="checkbox" name="name" />
<input type="checkbox" name="hi" />

そして、1番目と3番目がチェックされていると仮定すると、次のobjが必要です:

{ email: 1, name: 0, hi: 1 }

これが私が試したことです:

$(':checkbox').map(function() { return this.name + '=' + (this.checked ? 1 : 0) } }).get();

そして、それは私に与えます:

['email=1', 'name=0', 'hi=1']

でも、ここからどうすればいいのかわからない。

私はこれについて間違っていますか?

4

4 に答える 4

4

メソッド docoに従って.map().map()「jQuery でラップされた配列」を返します。オブジェクトが必要な場合は、代わりに次のようにすることができます。

var checkboxes = {};
$(':checkbox').each(function() {
    checkboxes[this.name] = this.checked ? 1 : 0;
});

同じ名前のチェックボックスがある場合 (html フォームに関する限り有効)、オブジェクトは各名前の最後のチェックボックスの値のみを保持することに注意してください。

于 2012-04-03T22:25:57.773 に答える
1

ええ、あなたはこれについてかなり間違っています。使用する'='と、関数がJavaScriptコードを返し、それがを使用して実行されることを期待しているように見えますeval。これはJavaScriptの動作方法ではありません。文字列と数値を連結this.nameしているため、JavaScriptは暗黙的な型強制を実行し、関数から文字列を返すため、文字列の配列を取得します。

.map()関数は常に配列を返します; 配列を返さないその他の操作の場合は、汎用.each()イテレータを使用する必要があります。

これがあなたが望むことをするクイックプラグインです。

$.fn.serializeCheckboxes = function() {

    var ret = {};
    this.each(function(ix,elm) {
        ret[elm.name] = elm.checked ? 1 : 0;
    });
    return ret;
}
于 2012-04-03T22:27:51.593 に答える
1

これを試して:

$('input[type="checkbox"]').each(function() {
        var name = $(this).attr('name');
        obj[name] = $(this).is(':checked') ? 1 : 0;
 });

http://jsfiddle.net/T7fja/1/

于 2012-04-03T22:28:33.393 に答える
1

連想配列構文を使用してプロパティの設定を試すことができます。ob["property"] = ...

この作業フィドルを参照してください: http://jsfiddle.net/tuando/JwYFz/

于 2012-04-03T22:24:50.143 に答える