1

jqGridを無効にする方法を探していて、いくつか見つけました:

  1. BlockUI プラグインの使用: http://jquery.malsup.com/block/
  2. jqGrid オプションの使用: loadui を使用して「block」に設定します。

最初のオプションは優れた解決策であり(私はまだ試していません)、おそらくより明確ですが、オブジェクトのプロパティを設定することでできる限りプラグインの使用を避けたいので、2番目のオプションを試していますが、うまくいきません私、jqGridは引き続き有効です。

私のasp.net mvc 4ビューの私のjqgrid:

<div id="jqGrid">
    @Html.Partial("../Grids/_PartialGrid")
</div>

および _PartialGrid:

<table id="_compGrid" cellpadding="0" cellspacing="0">
</table>
<div id="_compPager" style="text-align: center;">
</div>

そのため、ビューのスクリプト セクションでは、ドキュメントの準備ができたときに、モデル内のプロパティのステータスに応じて以下を実行します (id>0 の場合は無効にし、それ以外の場合はページのリロード時に有効にします)。

@section scripts
{
    @Content.Script("/Grids/CompGrid.js", Url) // Content is a helper javascript loader (see end of this post)
}

<script type="text/javascript">
$(document).ready(function () {

    showGrid();
    var disableCompGrid = @Html.Raw(Json.Encode(Model.ItemCompViewModel));
    setStatusCompGrid(disableCompGrid.id > 0);

}
</script>

CompGrid.js は次のとおりです。

function showGrid() {
    $('#_compGrid').jqGrid({
        caption: paramFromView.Caption,
        colNames: ....
}

function setStatusCompGrid(disabled) {
           $('#_compGrid').jqGrid({
                loadui: 'block',
                loadtext: 'Processing...'
           });
}

上記のコードでは、showGrid関数にdisabledパラメーターとして渡そうとしましたが、変数をそれぞれ「ブロック」または「有効」に設定するのがtrueまたはfalseであるかに応じて、この変数でloaduiプロパティを設定しましたが、動作していません。

Content.cshtml:

@using System.Web.Mvc;

@helper Script(string scriptName, UrlHelper url)
{
    <script src="@url.Content(string.Format("~/Scripts/{0}", scriptName))" type="text/javascript"></script>
}

何か案は?

4

2 に答える 2

4

呼び出しによって、最初の空の要素がダイブとテーブルの比較的複雑な構造に$('#_compGrid').jqGrid({...}); 変換されることを理解することが重要です。したがって、そのような呼び出しは一度だけ<table id="_compGrid"></table>行うことができます。このような呼び出しは、 grid を作成して初期化します。つまり、関数の名前が悪いのです。関数は1 回だけ呼び出すことができます。2 番目の呼び出しは、グリッドが既に存在することをテストし、何もしません。既存のグリッドのいくつかのパラメーターを変更する必要がある場合は、メソッドを使用できます。showGridsetGridParam

その場合、グリッドをブロックするために絶対に別のソリューションを使用できます。呼び出し$('#_compGrid').jqGrid({...});の後、最初のテーブルの DOM 要素がいくつかの expandos (新しいプロパティまたはメソッド) を取得します。たとえば、メソッドを$('#_compGrid')[0]含むgridプロパティが含まれます。したがって、最初に (関数内で) グリッドを作成し、オプションを含め、使用するオプションのリストに含めることができます。その後、後でグリッドをブロックする必要がある場合は、使用できますbeginReqendReqshowGridloadui: 'block'loadtext: 'Processing...'

$('#_compGrid')[0].grid.beginReq();

そしてコード

$('#_compGrid')[0].grid.endReq();

ブロッキングを解除します。これを示すデモを参照してください。または、回答で説明したように、jqGrid によって手動で作成されたオーバーレイを表示することもできます。コードは十分に単純です。

var gridId = "_compGrid"; // id of the grid
...
$("#lui_" + gridId).show();
$("#load_" + gridId).text("Processing...").show();

オーバーレイを表示し、

$("#lui_" + gridId).hide();
$("#load_" + gridId).hide();

オーバーレイを非表示にします。最初のデモとまったく同じように動作する別のデモをご覧ください。

于 2013-11-06T15:21:48.920 に答える
1

プラグインは必要ありません。css を追加/削除するだけです:

.disabled {
  pointer-events: none;
  //optional
  opacity: 0.4;
}

デモ

于 2016-03-10T20:02:46.330 に答える