当前位置: 首页 > 知识库问答 >
问题:

如何重写jQuery.Serialize以包含未选中复选框

段成益
2023-03-14

我读过很多不同的将html复选框发送到服务器的方法,但我真的希望在不修改$.Serialize以外的任何内容的情况下完成它。理想情况下,我希望选中的框作为on发布,而未选中的框作为0、空或NULL发布。

我对jQuery的内部工作有点困惑,但是到目前为止我已经知道了,但是它将未选中的复选框设置为“on”...有人能告诉我如何继续下面的这个修改吗?

$.fn.extend({
    serializeArray: function() {
        return this.map(function(){
            return this.elements ? jQuery.makeArray( this.elements ) : this;
        })
        .filter(function(){
            return this.name && !this.disabled &&
                ( this.checked || !this.checked || rselectTextarea.test( this.nodeName ) || rinput.test( this.type ) );
        })
        .map(function( i, elem ){
            var val = jQuery( this ).val();

            return val == null ?
                null :
                jQuery.isArray( val ) ?
                    jQuery.map( val, function( val, i ){
                        return { name: elem.name, value: val.replace( /\r?\n/g, "\r\n" ) };
                    }) :
                    { name: elem.name, value: val.replace( /\r?\n/g, "\r\n" ) };
        }).get();
    }
});

共有1个答案

籍利
2023-03-14

只要附上数据。在我的save例程中,将unchecked提交为空字符串并将checked提交为“on”就足够了:

var formData = $('form').serialize();

// include unchecked checkboxes. use filter to only include unchecked boxes.
$.each($('form input[type=checkbox]')
    .filter(function(idx){
        return $(this).prop('checked') === false
    }),
    function(idx, el){
        // attach matched element names to the formData with a chosen value.
        var emptyVal = "";
        formData += '&' + $(el).attr('name') + '=' + emptyVal;
    }
);
 类似资料:
  • 我想调用一个函数时,选择的任何选项。类似于这样: 但不知何故不起作用。有人能帮忙吗。 请注意 我不想捕获更改事件,如果我选择已经选择选项,则不会触发更改事件

  • 如果数据库中的数据为是或否,如何选中复选框,我尝试使用attr函数,但没有成功 这是我的html

  • 如果选中复选框D并取消选中其他复选框,我希望选中复选框K和F。同样,如果选中复选框I,则前面的复选框I将被选中,下面的复选框将被取消选中。我的html代码是: 我为此所做的是: 这看起来很乱,还有一个很酷的过程吗???

  • 问题内容: 我有4个复选框。我希望用户仅选择其中两个。如何设置该限制? 问题答案: 您可以轻松地使用一个变量来存储当前选中的复选框的数量…然后调用任何时间,检查该变量,如果它已经是要选中的第三个复选框,则只需将其设置为再次取消选中即可。 假设您首先取消选中所有复选框。所以你也是: 然后设置: (我尚未测试过代码,但应该可以。)

  • 问题内容: 我有一堆默认情况下处于选中状态的复选框。我的用户可能会取消选中某些复选框(如果有),而其余复选框保持选中状态。 有没有什么办法让表单POST所复选框 不 检查,而不是的那些 被 选中? 问题答案: 为具有不同ID的复选框添加隐藏的输入: 提交表单之前,请根据检查的条件禁用隐藏的输入:

  • 问题内容: 我有如下形式: 当我选中所有复选框并发布表单时,结果如下所示: 然后我取消选中第二个复选框并发布表单,结果是这样的: 当我取消选中第二个复选框时,是否有可能得到如下所示的结果: 有想法吗? 问题答案: 第一种方法-隐藏字段(缺点:用户可以操纵字段的值(但是也可以操纵复选框的值,因此,如果只期望1或0,这不是真正的问题)) 第二种方法-为未设置的索引分配默认值: