4

次のコードが 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 要素の選択を変更し、再度戻って新しいグリッドをロードする必要があります。

更新: プラグインの $(this) を実際の要素セレクター $('#grid') に置き換えると、プラグインが他のいくつかのテーブル要素で使用されているため、実際のアプリではこれを行うことができません。グリッド

4

4 に答える 4

4

将来の読者のためにクリーンアップ:

だからここに一種のフィドルがあります:http://jsfiddle.net/s3MsW/10/

基礎となるコードが疑わしいため(jqGrid自体)、「一種」と言います。しかしすぐにそこにたどり着きます... まず、プラグインに対して「これ」をログに記録すると、それは実際にはノードではなく 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(ゴースト ノードを) 破棄することをお勧めしますが、そのままにしておくだけで実際に問題が発生することはありません。

于 2012-04-04T05:04:00.867 に答える
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(...)ラップされた set に複数の要素を含めることができるような使用法でもプラグインが機能することを確認してください$(".myGridClass")

于 2012-04-04T05:21:08.737 に答える
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 */
于 2013-02-18T17:12:40.047 に答える
-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() 

スイッチの括弧内

于 2012-04-04T04:01:49.827 に答える