2

私はグリッドを持っています。このmultiselect = trueようなものです。各チェックボックスをクリックしてから削除できます。最初の行を削除すると、selarrrow メソッドが作成して配列を削除するだけですが、2 番目の行を削除したいときは決して削除しません。メソッド、および複数のチェックボックスを選択すると、最初のチェックボックスが削除されます。私のメソッドは毎回何度もループしていると思いますが、少なくとも他の行を視覚的に削除することはありません。どうすれば修正できますか?? アドバイスありがとうdelRowData

これは私の方法です:

onSelectRow:function(id) {
    $("#mySelect").change(function (){ 
        if(($("#mySelect option:selected").text()) == 'Deleted') {
            var id = $("#list2").getGridParam('selarrrow');
            for(var i =0; i<id.length;i++) {
                $("#list2").jqGrid('delRowData',id[i]);
        }
    });
}

html

</head>
<body>

<div>
            Move to:
            <select id="mySelect">

            <option value="1">Select and option</option>
            <option value="2">Trash</option>
            <option value="3">Deleted</option>

            </select>
</div>

<table id="list2"></table>
<div id="pager2"></div> 
</body>
</html>

js

$("#Inbox").click(function () {
    $.post('../../view/inbox.html', function (data) {
        $('#panelCenter_1_1').html(data);
        $("#list2").jqGrid({
            url: '../..controller/controllerShowInbox.php',
            datatype: 'json',
            colNames: ['From', 'Date', 'Title', 'Message'],
            colModel: [
                { display: 'From', name: 'name', width: 50, sortable: true, align: 'left' },
                { display: 'Date', name: 'date', width: 150, sortable: true, align: 'left' },
                { display: 'Title', name: 'title', width: 150, sortable: true, align: 'left' },
                { display: 'Message', name: 'message', width: 150, sortable: true, align: 'left' },
            ],
            searchitems: [
                { display: 'From', name: 'name' },
                { display: 'Date', name: 'date' },
                { display: 'Title', name: 'title' },
                { display: 'Message', name: 'message' },
            ],
            rowNum: 10,
            rowList: [10, 20, 30],
            pager: '#pager2',
            sortname: 'id_usuario',
            viewrecords: true,
            sortorder: "desc",
            caption: "Inbox",
            multiselect: true,
            multiboxonly: true,
            onSelectRow: function (id) {
                $("#mySelect").change(function () {
                    if (($("#mySelect option:selected").text()) == 'Trash') {
                        var id = $("#list2").getGridParam('selarrrow');
                        if (id != '') {
                            var grid = $("#list2");
                            grid.trigger("reloadGrid");
                            $.post('../../controller/controllerChangeStatus.php', { id: id }, function (data) {
                                $('#panelCenter_2_1').html(data);
                                grid.trigger("reloadGrid");
                            });
                        }
                    } else if (($("#mySelect option:selected").text()) == 'Deleted') {
                        id = $("#list2").getGridParam('selarrrow');
                        if (id != '') {
                            var grid = $("#list2");
                            grid.trigger("reloadGrid");
                            $.post('../../controller/controllerChangeStatus.php', { id: id }, function (data) {
                                $('#panelCenter_2_1').html(data);
                                grid.trigger("reloadGrid");
                            });
                        }
                    } else {
                    }
                });
            }
        });
    });
});
4

3 に答える 3

2

あなたのコードは私にとって非常に奇妙に見えます。デモ コードがなければ、あなたが説明した効果を説明することはできませんが、書き直すべきコード内のいくつかの場所を指摘できます。

最初idの問題: 行でパラメーターをonSelectRow:function(id)使用し、同じ変数名idを使用して宣言しvar id = $("#list2").getGridParam('selarrrow');ます。なぜあなたがこれをするのか理解できません。パラメータが必要ない場合は、コードをより明確にするためにonSelectRow使用できます。onSelectRow:function()

change2 番目の問題:で eventへのバインディングを$("#mySelect").change使用していますが、別の event 内でステートメントを使用していますonSelectRow。したがって、行を選択するたびに、changeeventに対するイベント ハンドラーが 1 つ増えます。たとえば、 to の本体を置き換え$("#mySelect").change(function (){ますalert("changed!")。次に、2 つの異なる行を選択し、「#mySelect」のオプションを変更します。2 つのアラートが表示されます。次に、別の行を選択し、「#mySelect」でオプションを変更します。3 つのアラートが表示されます。等々。

したがって、何らかの方法でコードを書き直す必要があります。それでも同じ問題が発生する場合は、<select id="mySelect">...問題の再現に使用できる完全なデモ コード (HTML コードを含む) を含める必要があります。

于 2011-09-21T21:50:26.890 に答える
1

私は別のアプローチを使用します。選択した行 ID のベクトルを作成し、サーバー側で単一のバッチ ステートメントを使用してそれらを処理し、グリッドをリロードします。

多かれ少なかれコードです。

var righe = $(nomeGrigliaFiglia).getGridParam("selarrrow");
if ((righe == null) || (righe.length == 0)) {
    return false;
}
var chiavi = [];
for (var i = 0; i < righe.length; i++) {
    var Id = righe[i];
    var data = $(nomeGrigliaFiglia).jqGrid('getRowData', Id);
    // Process your data in here
    chiavi[i] = new Array(2)
    chiavi[i][0] = data.FieldKey;
    chiavi[i][1] = data.FieldChildId;
}

これを実際にint [][]C#アクションに送信するために使用していることに注意してください

于 2011-09-30T13:37:27.883 に答える
-1
  1. multiselect: true

  2. あなたのデータプロセスphpで$SQL .= "DELETE FROM ". $table. " WHERE no in ($_POST[id]);" ;

于 2012-08-03T20:44:01.393 に答える