【问题标题】:Jquery form serialize - Multiple select on jqgridJquery表单序列化 - jqgrid上的多项选择
【发布时间】:2012-10-02 22:04:38
【问题描述】:

我有一个 jqGrid,我在其中向 colmodel 发送一个名为“equipments”的特定属性的字符串值。只要值在网格上完美显示,一切都很好。 我还添加了一个添加和编辑按钮,一切都很好,工作正常,表单按预期显示。 (请原谅这个看似很长的帖子,但它非常容易理解)

我在添加表单上修改了名为设备的字段,并像这样注入了我自己的多项选择

colModel

            {name:'equipments',index:'equipments', width:6, editable:true, edittype:'custom',
              editoptions:{
                  custom_element:function(){                                  
                        return $('<div id="mytrensferselect"><div class="transfer"><select id="select1" multiple="multiple"></select><a href="#" id="addbutton">add</a></div><div class="transfer"><select id="select2" multiple="multiple"></select><a href="#" id="removebutton">remove</a></div></div>');  
                      },
                      custom_value:function(ele){
                                return ele.val();           
                      }                               
                  }                           
            }

添加按钮 - beforeShowForm 选项

                    bSubmit: "Save and New",
                    bCancel: "Cancel",
                    beforeShowForm: function(form) {
                            $.get('<c:url value="/moduleinstances/retrieveequipments?miId="/>' , function(data){  //load in my list of equipments as json string
                                var obj = jQuery.parseJSON(data);  //parse the resulting json in order to populate select1 and select2
                            $("#select1").html(obj.remaining);
                            $("#equipments").removeAttr("name").removeAttr("id").removeClass("customelement");
                            $("#select2").html(obj.owning).attr("name","equipments").attr("id","equipments").addClass("customelement");
                            $('#addbutton').click(function() {
                                return !$('#select1 option:selected').remove().appendTo('#equipments');
                            });
                            $('#removebutton').click(function() {
                                return !$('#equipments option:selected').remove().appendTo('#select1');
                            });
                            }); //End AJAX CALL abd CUSTOM Transfer Select logic

//Start Logic For Custom Save and Close Button

                        $('<a href="#">Save and Close<span class="ui-icon ui-icon-disk"></span></a>').click(function() {
                            if($.isNumeric($(form.selector+" #rateOfPay").val())){
                                $.post('<c:url value="/moduleinstances/create/${courseModule.id}"/>', $('#FrmGrid_list2').serialize() , function(data){
                                    $('#list2').trigger("reloadGrid");
                                    $("#cData").trigger('click');
                                }); 
                            }else{
                                    alert("Pay Rate must be numeric");
                            }                      
                        }).addClass("fm-button ui-state-default ui-corner-all fm-button-icon-left")
                        .prependTo("#Act_Buttons>td.EditButton");
                        $('#title').attr('value','${courseModule.name}'); 
                        $("#leadLecturer").val( '${lecturer.id}' );
                    }

这是我添加表单的相关部分。

当我点击 Save and New 这是我通过上面的bSubmit: "Save and New" 取消清除的提交按钮时,该功能工作正常。这方面的邮政数据显示在您的左侧。当我单击 Save and close 按钮时,这是我的自定义按钮。帖子数据显示在您的右侧。

Save and Close 使用 jquery 来序列化整个表单,就像这样$('#FrmGrid_list2').serialize(),这就是它变得毛茸茸的地方。

如果我们查看在这两种情况下发布的设备内容,我们可以看到名称差异。似乎 jqGrid 足够智能,可以计算出它的一组值,而 jquery serialize() 并没有按照我想要的方式进行。我正在使用 Spring MVC 3.0,这是我的设备数据执行操作的地方。

@RequestMapping(value = "update", method = RequestMethod.POST)
public @ResponseBody String update(Model uiModel,
        @RequestParam("id") Long mId,
        @RequestParam("campus") Long cId,
        @RequestParam("leadLecturer") Long lId,//This is actually a Person ID.
        @RequestParam("semesterStartDate") @org.springframework.format.annotation.DateTimeFormat(pattern = "MMMM dd, yyyy") java.util.Calendar semesterstartdate,
        @RequestParam("semesterEndDate") @org.springframework.format.annotation.DateTimeFormat(pattern = "MMMM dd, yyyy") java.util.Calendar semesterenddate,
        @RequestParam("tuitionStartDate") @org.springframework.format.annotation.DateTimeFormat(pattern = "MMMM dd, yyyy") java.util.Calendar tuitionstartdate,
        @RequestParam("tuitionEndDate") @org.springframework.format.annotation.DateTimeFormat(pattern = "MMMM dd, yyyy") java.util.Calendar tuitionenddate,
        @RequestParam("rateOfPay") Double rateOfPay,
        @RequestParam("equipments[]") ArrayList<String> equipments,
        HttpServletRequest httpServletRequest) { Bla...bla...bla }

看最后一个@RequestParam,Spring能够处理项目数组,但是当它使用jQuery序列化发布时,动作找不到名为“设备[ ]" 我看到了一个关于这个的链接here,我可以简单地这样做吗?

任何想法

【问题讨论】:

  • 当我试图捕捉一个可以有多个值的请求参数时,我使用类似:@RequestParam("equipments") String[] equipments。然后我通常手动将 String[] 转换为 List 。右侧的 POST 数据似乎“正确”,因此我会尝试强制您的 JS/jQuery 代码在两种情况下都生成该表单。

标签: jquery spring-mvc jqgrid jqgrid-php


【解决方案1】:

好吧,为了其他人的利益,我为解决问题所做的是将表单手动序列化为格式良好的 json-string 并将该字符串变量发送到服务器。像

//select each form element and get its value using jquery
    var customPostData = '({ sessionNumber: "'+$("#sessionNumber").val()+'", sessionDate: "'+$("#sessionDate").val()+'", starttime: "'+$("#starttime").val()+'", endtime: "'+$("#endtime").val()+'", sessionStatus: "'+$("#sessionStatus").val()+'", sessionType: "'+$("#sessionType").val()+'", topic: "'+$("#topic").val()+'", id: "'+myId+'", equipments:'+selectedequips.toSource()+'})';
    var submitdata = eval('(' + customPostData + ')'); //use parseJSON insted of eval

    $.post("my-url", submitdata , function(data){
       //use the returning information in the data variable
    });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-06
    • 2022-01-16
    • 1970-01-01
    • 2015-06-14
    相关资源
    最近更新 更多