序列化未选中的单选按钮

时间:2013-05-16 22:27:06

标签: jquery html forms

<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

正如你所看到的,我对一组中的每个收音机都是假的。但如果没有选择,我只想要a=false。我怎样才能做到这一点?

小提琴: http://jsfiddle.net/WcxwV/

修改:

预期产出:

txt=something&a=false&b=false

3 个答案:

答案 0 :(得分:0)

我只会做var str = $('form').serialize();,然后将缺失的变量视为未选中。这是预期的用途。我没有理由将其手动设置为等于false

答案 1 :(得分:0)

如果您刚刚添加了另一个已选中的隐藏单选按钮且其值=“”,则问题将得到解决

<input type="radio" name="a" value="" checked style="display:none;">

答案 2 :(得分: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;
};

code sample