是否可以在javascript函数中包含事件?
我只是想知道从主javascript获取jqgrid事件并使用另一个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
...//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
};
}
}