我希望以下代码卸载javascipt jqgrid,然后使用不同的选项加载另一个网格,包括不同的列
//onload
(function($)
$.fn.myGridFn = function(options){
$(this).jqGrid('GridUnload');
$(this).jqGrid(options.gridoptions);
//....
$('#select').change(function(){
switch($(this).val())
{
case 'grid1':
$('#grid').myGridFn({gridoptions:{/*grid1 options*/}});
break;
case 'grid2':
$('#grid').myGridFn({gridoptions:{/*grid2 options*/}});
break;
}
});
})(jQuery);
//...
<table id="grid"></table>
我得到的是网格卸载,然后我必须更改select元素中的选择,然后再返回以加载新网格。
更新 如果我用实际的元素选择器$('#grid')替换插件中的$(this) - 它工作得很好,我不能在我的真实应用程序中这样做,因为插件被其他几个表元素和网格使用< / p>
答案 0 :(得分:4)
为未来的读者清理:
所以这是一种工作小提琴:http://jsfiddle.net/s3MsW/10/
我说“有点”因为底层代码是可疑的(jqGrid本身)。但是我们马上就会到达那里......第一件事:如果你为插件记录“this”,它实际上是jQuery对象,而不是节点。从理论上讲,我们可以使用$(this)
替换原始代码中的this
,并且所有代码都可以正常工作。
除非。
您实际上可以使用this
来卸载网格,但是该函数会将this
作为引用而不指向呈现页面上的表。有一些方法可以显示旧节点仍然存在(http://jsfiddle.net/s3MsW/8是一个测试),但足以说它不能再用于向页面正确呈现新表。
除了缓存选择器字符串并从头开始重新选择干净表(即创建一个新的jQuery对象)之外,没有其他选择:
$.fn.myGridFn = function(options){
var theId = this.selector;
this.jqGrid('GridUnload'); // reference works for now
$(theId).jqGrid(options); // reference is broken, so re-select with cached ID
}
如果你对内存使用情况很认真,你可能想要销毁this
(鬼节点),但是保留它可能没什么坏处。
答案 1 :(得分:1)
在我看来,您应该将$(this)
保存在$this
之类的变量中,稍后再使用。问题只在于
$('#select').change(function(){/*here*/}); // another value of this
所以你应该做
(function($)
$.fn.myGridFn = function(options) {
var $this = $(this), selector = $this.selector;
$this.jqGrid('GridUnload');
$this = $(selector); // reset $this value
...
$('#select').change(function() {
switch($(this).val()) { // here is $('#select')
case 'grid1':
$this.myGridFn({gridoptions:{/*grid1 options*/}});
...
另外一个用途通常是用
启动插件体return this.each( function() { ...
要确保您的插件在$(".myGridClass").myGridFn(...)
等用法的情况下也可以使用,其中一个元素可以在包装集$(".myGridClass")
中作为一个元素使用。
答案 2 :(得分:0)
这个问题很难解决,上面的答案是正确的。
我一直在尝试执行以下操作:
this.jqGrid('GridUnload')
this.('getGridParam'); /* Still returning all the parameters for the grid. */
相反,我做了:
var $t = $(this.selector);
$t.jqGrid('GridUnload');
$t = $(this.selector);
$t.jqGrid('getGridParam'); /* Now empty */
答案 3 :(得分:-1)
我想你应该试试
$('#select option:selected).val()// gives the value of the selected option.
$('#select option:selected).text()// gives the text of the selected option.
而不是
$(this).val()
在开关的括号中