<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
答案 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;
};