将checkbox未选中将设置为指定值并系列化,解决checkbox未选中不传递值问题
Posted Hello World,
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将checkbox未选中将设置为指定值并系列化,解决checkbox未选中不传递值问题相关的知识,希望对你有一定的参考价值。
(function ($) {
//将checkbox未选中将设置为指定值并系列化
jQuery.fn.extend({
serializeWithCheckbox: function (uncheckedValue) {
return jQuery.param(this.serializeArrayWithCheckbox(uncheckedValue));
},
serializeArrayWithCheckbox: function (uncheckedValue) {
var
rCRLF = /\\r?\\n/g,
rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
rsubmittable = /^(?:input|select|textarea|keygen)/i,
rcheckableType = (/^(?:radio)$/i); //仅将radio设置为不发送未选中项
//未指定的转换为false
if (uncheckedValue == undefined)
uncheckedValue = 'false'
uncheckedValue = uncheckedValue + '';//转字符串
return this.map(function () {
// Can add propHook for "elements" to filter or add form elements
var elements = jQuery.prop(this, "elements");
return elements ? jQuery.makeArray(elements) : this;
})
.filter(function () {
var type = this.type;
// Use .is( ":disabled" ) so that fieldset[disabled] works
return this.name && !jQuery(this).is(":disabled") &&
rsubmittable.test(this.nodeName) && !rsubmitterTypes.test(type) &&
(this.checked || !rcheckableType.test(type));
})
.map(function (_i, elem) {
var val = jQuery(this).val();
if (val == null) {
return null;
}
//将未勾选的checkbox值设置为指定值
if (this.type == 'checkbox' && this.checked == false)
val = uncheckedValue;
if (Array.isArray(val)) {
return jQuery.map(val, function (val) {
return { name: elem.name, value: val.replace(rCRLF, "\\r\\n") };
});
}
return { name: elem.name, value: val.replace(rCRLF, "\\r\\n") };
}).get();
}
});
})(jQuery);
因表单默认不会提交未选中的checkbox,通常的做法是生成一个隐藏的input,当未选中时设置为某个值,但操作比较麻烦,jQuery系列化时也是根据表单的行为来处理的。实际情况可能需要提交未选中的值并设置为某个特定的内容。这段代码增加了一个serializeWithCheckbox函数,用于处理此问题。
调用方法:$('#formid或者其他选择器').serializeWithCheckbox(默认值);
以上是关于将checkbox未选中将设置为指定值并系列化,解决checkbox未选中不传递值问题的主要内容,如果未能解决你的问题,请参考以下文章
PHP JQuery Checkbox - 如果复选框被预先选中,它不会在未选中时删除“选中”属性
angularjs实现checkbox的点击-全选功能-选中数据
在ext中如何动态设置checkbox的checked属性!
UITableViewCell未选中时如何将其背景视图设置为选中的背景?