Javascript 使用jqGrid和jQuery时函数内未触发事件

Javascript 使用jqGrid和jQuery时函数内未触发事件,javascript,jquery,jqgrid,Javascript,Jquery,Jqgrid,我不熟悉javascript、jQuery和jqGrid,所以这可能是一个非常基本的问题 为什么事件在此正确触发并触发警报: $("#list").jqGrid({loadComplete: alert('load complete') }); 但当警报在函数中时不在这里 $("#list").jqGrid({loadComplete: function() {

我不熟悉javascript、jQuery和jqGrid,所以这可能是一个非常基本的问题

为什么事件在此正确触发并触发警报:

        $("#list").jqGrid({loadComplete: alert('load complete')
            });
但当警报在函数中时不在这里

        $("#list").jqGrid({loadComplete:
                               function() {
                                    alert('load complete');
                               }
            });
我猜有一些相当基本的东西我(还)不明白


谢谢--Jeff

它需要一个函数,当您将警报本身传递给它时,您正在调用警报并尝试将结果分配给处理程序。相反,您需要一个实际的处理程序(在第二次调用的情况下是一个匿名函数)


并不是第一个在事件中正确触发,它实际上是在该行代码运行时立即触发的,听起来您的代码根本没有触发
loadComplete
处理程序,这是jqGrid的一个单独问题。

当您将警报本身传递给它时,它需要一个函数,此时您正在调用警报并尝试将结果分配给处理程序。相反,您需要一个实际的处理程序(在第二次调用的情况下是一个匿名函数)


这并不是说第一个在事件中正确触发,它实际上是在那行代码运行时立即触发的,听起来你的代码根本没有触发
loadComplete
处理程序,这是jqGrid的一个单独问题。

我最近尝试过做同样的事情(与你的位置相同,基本上对任何事情都是陌生的),我从来没有工作过。现在调查,现在我更了解了:

查看源代码,似乎loadComplete仅在您的数据类型为“script”或“xmlstring”时才会激发,这使得它非常无用。而且很奇怪

如果您试图在数据进入网格之前使用它做一些事情,我建议将您的数据类型设置为函数,并在其中执行您自己的ajax/任何操作。当数据返回时,只需执行grid.addData(data),它就会填充网格


如果您试图在输入数据后执行某些操作,请改用gridComplete,它会可靠地启动。

我最近也尝试过同样的操作(与您的位置相同,基本上是新手),loadComplete从未为我工作过。现在调查,现在我更了解了:

查看源代码,似乎loadComplete仅在您的数据类型为“script”或“xmlstring”时才会激发,这使得它非常无用。而且很奇怪

如果您试图在数据进入网格之前使用它做一些事情,我建议将您的数据类型设置为函数,并在其中执行您自己的ajax/任何操作。当数据返回时,只需执行grid.addData(data),它就会填充网格


如果您试图在输入数据后执行某些操作,请改用gridComplete,它会可靠地触发。

发布链接后,我了解您会犯什么错误。不应在两个调用中分离jqGrid定义:

jQuery("#list").jqGrid({
    datatype: 'xml',
    mtype: 'GET',
    loadonce: true,
    // other parameters
    caption: 'My first grid', 
    xmlReader: { 
        root: "export", 
        row: "row",
        repeatitems: false
    }
 });

但是将
loadComplete
定义为
$(“#list”).jqGrid({…})的one调用的一部分如下所示:

jQuery("#list").jqGrid({
    datatype: 'xml',
    mtype: 'GET',
    loadonce: true,
    // other parameters
    caption: 'My first grid', 
    xmlReader: { 
        root: "export", 
        row: "row",
        repeatitems: false
    },
    loadComplete: function(data) {
        alert('load complete');
    }
 });
如果以后必须设置事件处理程序,则应使用
setGridParam
方法(请参阅)


此外,我完全不同意Groxx的回答。将为所有数据类型(包括“xml”、“json”、“local”等)调用函数
loadComplete
。在函数
loadComplete
下的文档中如何查看是在数据加载(或刷新)后在网格中进行一些修改的最佳位置。我永久地使用这个函数。如果您需要加载非常奇特的数据(既不是xml也不是json等),那么使用datatype a函数是最后一种方法。对于xml和json数据的加载,jqGrid中有很多定制特性(参见示例)。因此,您可以定制
jQurey.ajax
调用,并根据需要转换用作
jQurey.ajax
输入和输出的数据。

发布链接后,我了解您所犯的错误。不应在两个调用中分离jqGrid定义:

jQuery("#list").jqGrid({
    datatype: 'xml',
    mtype: 'GET',
    loadonce: true,
    // other parameters
    caption: 'My first grid', 
    xmlReader: { 
        root: "export", 
        row: "row",
        repeatitems: false
    }
 });

但是将
loadComplete
定义为
$(“#list”).jqGrid({…})的one调用的一部分如下所示:

jQuery("#list").jqGrid({
    datatype: 'xml',
    mtype: 'GET',
    loadonce: true,
    // other parameters
    caption: 'My first grid', 
    xmlReader: { 
        root: "export", 
        row: "row",
        repeatitems: false
    },
    loadComplete: function(data) {
        alert('load complete');
    }
 });
如果以后必须设置事件处理程序,则应使用
setGridParam
方法(请参阅)


此外,我完全不同意Groxx的回答。将为所有数据类型(包括“xml”、“json”、“local”等)调用函数
loadComplete
。在函数
loadComplete
下的文档中如何查看是在数据加载(或刷新)后在网格中进行一些修改的最佳位置。我永久地使用这个函数。如果您需要加载非常奇特的数据(既不是xml也不是json等),那么使用datatype a函数是最后一种方法。对于xml和json数据的加载,jqGrid中有很多定制特性(参见示例)。因此,您可以定制
jqrey.ajax
调用并转换用作
jqrey.ajax
输入和输出的数据,就像您所希望的那样。

因此,第二个版本实际上是正确的形式,并且事件存在jqGrid问题?@jalperin-看起来该事件没有触发,是的,你有示例页面吗?我会在几分钟内设置一个。因此,第二个版本实际上是正确的形式,而且该事件存在jqGrid问题?@jalperin-看起来该事件没有触发,是的,你有示例页面吗?我会在几分钟后设置一个。抱歉,但我完全不同意你的观点。我在回答中包括了对你答案的详细评论。用于加载标准数据类型的datatype a函数的使用始于jqGrid 3.6发布之前。类似于
serializeGridData
的事件只允许您解决数据转换问题,而无需更改请求期间所有操作的标准方式