1
<form>
    // radio group 1
    <input type="radio" name="a" value="Y">Yes
    <input type="radio" class="ml_10" name="a" value="N">No
    <input type="radio" class="ml_10" name="a" value="O">Don't know</br>

    // radio group 2
    <input type="radio" name="b" value="Y">Yes
    <input type="radio" class="ml_10" name="b" value="N">No
    <input type="radio" class="ml_10" name="b" value="O">Don't know</br>

    // text input
    <input type='text' value='something' name="txt" />
</form>

私はこのフォームを持っています。ラジオ グループ 1 で何も選択されていないかのように の値を取得しようとしています (aのラジオ グループも同じです)。false

var str = $('form input:not([type="radio"])').serialize();
var str1 = $("form input[type='radio']").map(function () {
    return this.name + "=" + this.checked;
}).get().join("&");
if (str1 != "" && str != "") str += "&" + str1;
else str += str1;

出力は次のとおりです。txt=something&a=false&a=false&a=false&b=false&b=false&b=false

ご覧のとおり、グループ内のラジオごとに false になっています。しかしa=false、何も選択されていない場合にのみ必要です。どうすればこれを達成できますか?

フィドル: http://jsfiddle.net/WcxwV/

編集 :

期待される出力:

txt=something&a=false&b=false

4

3 に答える 3

0

チェックされている別の非表示のラジオ ボタンを追加し、その値が "" であれば、問題は解決します。

<input type="radio" name="a" value="" checked style="display:none;">
于 2015-08-21T20:19:51.783 に答える
0

これを試して

$.fn.serializeObject = function () {
var o = {};
var a = this.serializeArray();
$.each(a, function () {
    if (o[this.name] !== undefined) {
        if (!o[this.name].push) {
            o[this.name] = [o[this.name]];
        }
        o[this.name].push(this.value || '');
    } else {
        o[this.name] = this.value || '';
    }
});
var $radio = $('input[type=radio],input[type=checkbox]',this);
$.each($radio,function(){
    if(!o.hasOwnProperty(this.name)){
        o[this.name] = '';
    }
});
return o;
};

コードサンプル

于 2016-08-03T03:37:22.007 に答える