jqgrid无法从.change工作

时间:2013-01-15 01:59:24

标签: jquery jqgrid

我有以下内容:

     function setupGrid(labId) {

       var url = '@Url.Action("GetProgData", "Prog")' + '?lId=' + lId;
       alert(url);

       $("#loginList").jqGrid({
         url: url,
         datatype: "json",
         colNames: ['PNum', 'Client', 'Salesperson', 'Email', ....
       .....
       .....  

我还有以下代码:

    <script type="text/javascript">
      $(document).ready(function () {
       var labId;

       $("#LabId").change(function () {   // point1
        labId = $("#LabId").val();
        setupGrid(labId); // this goes to setupGrid but DOES NOT go to the given url( url = '@Url.Action("GetProgData", "Prog")' + '?lId=' + lId;)         
       });

       // point 2
       setupGrid(labId);  // this goes to setupGrid  and DOES go to the given url(url = '@Url.Action("GetProgData", "Prog")' + '?lId=' + lId;)
       ......

当程序第一次运行时,它转到point2,然后转到setupGrid函数并转到url值:

    url: url

当我从.change(point1)调用它时,它再次转到SetupGrid并且警报显示正确的值,但是无法理解为什么当我在URL上放置断点时它不会转到url。为什么它第一次工作,但是当我从.change执行它时,它不会转到url。

1 个答案:

答案 0 :(得分:0)

我看到jqGrid如何运作有共同的理解问题。

如果您使用$("#loginList").jqGrid({...});,则需要使用<table>id="loginList"元素。 jqGrid将<table>元素转换为相对复杂的div,表等结构。因此jqGrid 首先初始化网格。它构建了网格的外部

然后jqGrid对url进行Ajax调用(如果使用datatype: "json"datatype: "xml")并填充网格正文。可以使用$("#loginList").trigger("reloadGrid")刷新网格主体。

我希望现在应该清楚只能呼叫$("#loginList").jqGrid({...});一次。您尝试再次从现有网格创建网格l将被忽略。

您应该做的只是将代码重写为以下

$(document).ready(function () {
    var labId;

    $("#loginList").jqGrid({
        url: '@Url.Action("GetProgData", "Prog")',
        postData: {
            lId: function () {
                return $("#LabId").val();
            }
        },
        datatype: "json",
        colNames: ['PNum', 'Client', 'Salesperson', 'Email', ....
    });

    $("#LabId").change(function () {   // point1
        $("#loginList").trigger("reloadGrid");
    });
});

您可以阅读here有关postData属性中方法用法的更多信息。在another answer中,如果需要将一个表单的所有控件中的值发送到控制器操作,您将找到可行的替代方法。