Javascript 如何对jqGrid的loadComplete和OnSegrow进行前后方法调用?
我的网格有特殊的实现。Javascript 如何对jqGrid的loadComplete和OnSegrow进行前后方法调用?,javascript,jquery,jquery-plugins,jqgrid,extend,Javascript,Jquery,Jquery Plugins,Jqgrid,Extend,我的网格有特殊的实现。 为此,我在onsetrow和loadComplete方法jqGrid中编写了一些代码 在onsetrow中,我需要更新全局数组;在loadComplete方法中,我必须访问全局数组,并需要在jqGrid中进行一些操作 在那之前我没事。我已经做过了。 现在我想以这样一种方式扩展这两个方法,即实现将是通用的(其他网格可以在不编写任何代码的情况下使用) 为此,我想到了以下步骤 我想用jqGrid.js在我的html中添加一个新的js(例如:jquery.jqGrid.addit
为此,我在
onsetrow
和loadComplete
方法jqGrid中编写了一些代码
在onsetrow
中,我需要更新全局数组;在loadComplete
方法中,我必须访问全局数组,并需要在jqGrid中进行一些操作
在那之前我没事。我已经做过了。
现在我想以这样一种方式扩展这两个方法,即实现将是通用的(其他网格可以在不编写任何代码的情况下使用)
为此,我想到了以下步骤
preload complete
和postloadplete
,它们需要在loadComplete
方法执行前后执行。同样,OnSetrow方法也是如此
我在jquery.jqGrid.additional.js中编写了下面的代码,然后在jqGrid加载后没有得到警报(1),警报(2)
它只执行jqGrid的loadComplete方法编写的代码
var oldLoadComplete = $.fn.jqGrid.loadComplete;
$.jqGrid.extend({
loadComplete: function (){
var ret;
// do someting before
alert(1);
ret = oldLoadComplete.call (this);
// do something after
alert(3);
return ret; // return original or modified results
}
});
我对此做了很多尝试,花了很多时间。您正在尝试扩展
$.jqGrid
,而不是$.fn.jqGrid
。在第一行中,这意味着$.jqGrid
甚至不存在,并且所有元素都将无法访问修改后的.jqGrid
插件,但仍然是默认的
尽管我试图用一个“新”的append方法扩展$.fn
,但没有成功。您可能必须显式覆盖这些方法。我可以想象jQuery本身有一些安全例程,并且在$.extend
方法中内置了插件
var oldLoadComplete = $.fn.jqGrid.loadComplete;
$.fn.jqGrid.loadComplete = function( ) {
alert('pre');
var ret = oldLoadComplete.apply(this, arguments); // In case any arguments will be provided in future.
alert('post');
return ret;
};
编辑:
忘掉这些吧。这无关紧要。在GitHub上查看了jqGrid的源代码之后,很明显jqGrid甚至没有使用类似于$.fn.jqGrid.loadComplete
的东西。那是你自己编的。相反,它创建了另一个对象,该对象提供了一个可能属性和默认值的列表,然后被自定义默认值覆盖,最后被调用jqGrid时传入的函数参数覆盖
我发现jqGrid在调用loadComplete回调之前和之后分别对匹配元素集(即this
)触发两个事件jqGridLoadComplete
和jqGridAfterLoadComplete
)
所以基本上,你不能使用你的尝试。相反,我想到的唯一解决方案是使用相同的方法覆盖jqGrid“构造函数”(即$.fn.jqGrid
),并将侦听器应用于此
,如下所示:
var oldJqGrid = $.fn.jqGrid;
$.fn.jqGrid = function( ) {
this.on('jqGridLoadComplete', function( jqEvt ) {
alert('Pre');
})
.on('jqGridAfterLoadComplete', function( jqEvt ) {
alert('Post');
});
return oldJqGrid.apply(this, arguments);
};
关于你的多选。。。我不知道你在说什么。我自己的时间非常有限,现在不得不拒绝进一步的帮助
诚恳。您正在尝试扩展
$.jqGrid
,而不是$.fn.jqGrid
。在第一行中,这意味着$.jqGrid
甚至不存在,并且所有元素都将无法访问修改后的.jqGrid
插件,但仍然是默认的
尽管我试图用一个“新”的append方法扩展$.fn
,但没有成功。您可能必须显式覆盖这些方法。我可以想象jQuery本身有一些安全例程,并且在$.extend
方法中内置了插件
var oldLoadComplete = $.fn.jqGrid.loadComplete;
$.fn.jqGrid.loadComplete = function( ) {
alert('pre');
var ret = oldLoadComplete.apply(this, arguments); // In case any arguments will be provided in future.
alert('post');
return ret;
};
编辑:
忘掉这些吧。这无关紧要。在GitHub上查看了jqGrid的源代码之后,很明显jqGrid甚至没有使用类似于$.fn.jqGrid.loadComplete
的东西。那是你自己编的。相反,它创建了另一个对象,该对象提供了一个可能属性和默认值的列表,然后被自定义默认值覆盖,最后被调用jqGrid时传入的函数参数覆盖
我发现jqGrid在调用loadComplete回调之前和之后分别对匹配元素集(即this
)触发两个事件jqGridLoadComplete
和jqGridAfterLoadComplete
)
所以基本上,你不能使用你的尝试。相反,我想到的唯一解决方案是使用相同的方法覆盖jqGrid“构造函数”(即$.fn.jqGrid
),并将侦听器应用于此
,如下所示:
var oldJqGrid = $.fn.jqGrid;
$.fn.jqGrid = function( ) {
this.on('jqGridLoadComplete', function( jqEvt ) {
alert('Pre');
})
.on('jqGridAfterLoadComplete', function( jqEvt ) {
alert('Post');
});
return oldJqGrid.apply(this, arguments);
};
关于你的多选。。。我不知道你在说什么。我自己的时间非常有限,现在不得不拒绝进一步的帮助
真诚地。嗨,德里亚,谢谢你的回复。根据您的建议,我在jquery.jqGrid.additional.js中添加了上述代码。我的jqGrid如下所示,$(“#appAndContextTable”).jqGrid({datastr:jsonString,…,loadComplete:function(){alert('needtoimplement');});当我加载网格时,我得到了用loadComplete方法编写的警报。我没有收到事前和事后警报。请帮助我如何获取pre和post警报。另外,如何在我自己定义的loadComplete方法中获取属性multiselect的值?@user1591670只是关于我的帖子更新的通知。你可能想看看。另外,在发布另一个问题之前,我建议您浏览一下您试图扩展的项目的源代码。帮助很大我花了大约10分钟才弄明白jqGrid的这些东西。谢谢Derija的帮助。我的问题解决了。你真的帮了我很多。我也找到了得到它的方法