Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以在javascript函数中包含事件?_Javascript_Events_Function_Jqgrid - Fatal编程技术网

是否可以在javascript函数中包含事件?

是否可以在javascript函数中包含事件?,javascript,events,function,jqgrid,Javascript,Events,Function,Jqgrid,我只是想知道从主javascript获取jqgrid事件并使用另一个javascript以函数的形式将其分离是否可行?我想做的就是这样。我有一个密码: ...//some code here serializeGridData: function(postData) { var jsonParams = { 'SessionID': $('#eSessionID3').val(), 'dataType': 'da

我只是想知道从主javascript获取jqgrid事件并使用另一个javascript以函数的形式将其分离是否可行?我想做的就是这样。我有一个密码:

     ...//some code here
     serializeGridData: function(postData) {
        var jsonParams = {
            'SessionID': $('#eSessionID3').val(),
            'dataType': 'data',
            'recordLimit': postData.rows,
            'recordOffset': postData.rows * (postData.page - 1),
            'rowDataAsObjects': false,
            'queryRowCount': true,
            'sort_fields': postData.sidx
        };

        if (postData.sord == 'desc')
        {
            ...//some code here
        }           
        else
        {
            ...//some code here
        }

        return 'json=' + jsonParams;
    },

    loadError: function(xhr, msg, e) { 
        showMessage('errmsg');
    },
            ...//some code here
我想得到这段代码并将其写入另一个javascript文件中,并将其作为一个函数,这样我的另一个文件就可以使用这段代码了。有可能吗

我在另一个javascrtip文件中创建了类似的东西,我计划将所有函数放在其中。下面是代码(functions.js):


这不起作用,显示消息语法错误。我不知道怎么纠正这个。有人能帮我吗?

你在混合函数声明和对象文字符号。此语法:
property:value
用于创建具有对象文字符号的对象:

var obj = {
   prop: val,
   prop2: val
};
serializeGridData
loadError
是某些对象的属性,您不能通过将它们放入函数来定义它们

一种方法是创建两个函数,一个用于
serializeGridData
,另一个用于
loadError
,例如

function serialLoad(postData){
  var jsonParams = {
     //...
  };

  if (postData.sord == 'desc') {
      //... some code here
  }           
  else {
      //... some code here
  }
  return 'json=' + jsonParams;
}

function onError(xhr, msg, e) { 
   showMessage('errmsg');
}
然后可以在其他文件中将它们指定给对象:

// ... some code here
serializeGridData: serialLoad,
loadError: onError,
//... some code here

另一种方法是将有问题的对象传递给函数并在那里指定属性:

function attachLoadHandler(obj) {
    obj.serializeGridData = function(postData) {
        //...
    };

    obj.loadError = function(xhr, msg, e) {
        //...
    };
}
然后必须将创建的对象传递给该函数:

attachLoadHandler(obj);

但我认为第一种方法更容易理解。

第二个示例不正确,因为您将javascript对象声明为函数体,您可以做的是:


首先回答你的直接问题。如果在functions.js文件中定义一些全局变量,例如,
myGlobal

myGlobal = {};
myGlobal = serializeGridData: function(postData) {
    // ... here is the implementation
};
您可以在另一个JavaScript文件中使用它,该文件必须包含在functions.js文件之后:

(只需在jqGrid定义中使用该参数)

如果要在大多数jqGrids中使用
serializeGridData
参数的值,可以在functions.js文件中覆盖
serializeGridData
的默认值:

jQuery.extend(jQuery.jgrid.defaults, {
    datatype: 'json',
    serializeGridData: function(postData) {
        // ... here is the implementation
    },
    loadError: function(xhr, msg, e) { 
        showMessage('errmsg');
    }
});
在这个例子中,我额外将默认的
datatype:'xml'
jqGrid参数修改为
datatype:'json'
。它显示了可以通过这种方式设置任何jqGrid参数的默认值

在我看来,您真正需要的是使用jqGrid参数来重命名标准jqGrid参数的一些defaulf名称。例如

prmNames: {
    rows:"recordLimit",
    sort: "sort_fields",
    search:null,
    nd:null
}
您可以将标准
参数重命名为
记录限制
sidx
重命名为
排序字段
,并删除要发送的
\u搜索
nd
参数

此外,您还可以使用
postData
,将某些属性定义为函数(有关详细信息,请参阅)。例如:

postData: {
    SessionID: function() {
        return $('#eSessionID3').val();
    },
    rowDataAsObjects: false,
    queryRowCount: true,
    dataType: 'data',
    recordOffset: function() {
        var pd = jQuery("#list2")[0].p.postData;
        return pd.recordLimit * (pd.page - 1);
    },
    json: function() {
        var pd = jQuery("#list2")[0].p.postData;
        return {
           SessionID: $('#eSessionID3').val(),
           dataType: 'data',
           recordOffset: pd.recordLimit * (pd.page - 1),
           rowDataAsObjects: false,
           queryRowCount: true,
           sort_fields: pd.sort_fields
        };
    }
}

我在这里使用了您当前使用的
json
参数,并在将要发送的参数列表中直接添加了
SessionID
queryRowCount
等参数。当然,只需发送一种方式(无论是
json
还是其他方式)即可发送您所需的传统信息。

谢谢您的回复,但它不起作用……加载时不再显示我的网格……控制台上没有错误。。。。是的,我从来没有忘记包含我的函数。js…@jayAnn:我更新了我的答案,
onError
函数的声明是错误的。您的第一个示例显示了一个错误“缺少(在形式参数[Break on this error]之前)函数onError:function(xhr,msg,e){\n”@jayAnn:是的,我已经更正了。检查我的更新和我的评论。我不知道,但我没有正确地使用我的程序。网格已经加载。但是感谢您的回答…控制台在“function loadError:function(xhr,msg,e){showMessage('errmsg');}”中显示了一条错误消息“missing(在形式参数之前)”你需要在@Felix的答案上发表上述评论。@jayAnn:啊,这是一个复制粘贴错误。删除第二个
函数
关键字。啊哈,,,我已经正确地做了…现在没有错误消息,但网格没有显示等待…好的..我想我应该研究一下你的代码…我相信这可以帮助我…谢谢你的帮助d您的时间……我是jqgrid和json的新手,我非常感谢您的努力。我希望我能有一个像您一样的头脑(Oleg…)@jayAnn:不客气!如果你以后会收到一些关于代码的其他问题,你可以在这里问你的问题。我已经阅读了你的代码很多次了,但我仍然不能正确理解它…我觉得它太复杂了。我不知道在哪里写jQuery.extend({…})(在主javascript或functions.js中),和postdata,我不知道我应该在哪里插入它,我应该在哪里写它..谢谢你oleg:)如果我不太明白,很抱歉…@jayAnn:你可以做以下事情:在functions.js中使用
jQuery.extend(jQuery.jgrid.defaults,…)
更改jqGrid的任何默认参数。例如,您可以设置
prmNames
serializeGridData
。然后在主脚本中定义jqGrid没有
serializeGridData
参数,在这种情况下,默认参数将使用您更改的
jQuery.jgrid.defaults
中的值杰扬:有帮助吗?也许我只是想写一个代码示例来回答你的下一个问题。
jQuery.extend(jQuery.jgrid.defaults, {
    datatype: 'json',
    serializeGridData: function(postData) {
        // ... here is the implementation
    },
    loadError: function(xhr, msg, e) { 
        showMessage('errmsg');
    }
});
prmNames: {
    rows:"recordLimit",
    sort: "sort_fields",
    search:null,
    nd:null
}
postData: {
    SessionID: function() {
        return $('#eSessionID3').val();
    },
    rowDataAsObjects: false,
    queryRowCount: true,
    dataType: 'data',
    recordOffset: function() {
        var pd = jQuery("#list2")[0].p.postData;
        return pd.recordLimit * (pd.page - 1);
    },
    json: function() {
        var pd = jQuery("#list2")[0].p.postData;
        return {
           SessionID: $('#eSessionID3').val(),
           dataType: 'data',
           recordOffset: pd.recordLimit * (pd.page - 1),
           rowDataAsObjects: false,
           queryRowCount: true,
           sort_fields: pd.sort_fields
        };
    }
}