javascript - 如果方法 selarrrow 返回具有超过 1 个索引的数组,如何删除 jqgrid 中的多行?

标签 javascript jqgrid jqgrid-php

我的网格带有 multiselect = true,类似于 this ,您可以单击每个复选框然后删除,当我删除第一行时我知道 selarrrow 创建的方法和数组它只是删除,但是当我想删除第二行时它永远不会执行 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 {
                    }
                });
            }
        });
    });
});

最佳答案

你的代码对我来说看起来很奇怪。如果没有演示代码,我无法解释您描述的效果,但我可以指出代码中的某些地方应该重写。

第一个问题:你使用id onSelectRow:function(id)行中的参数然后使用相同的变量名 id申报var id = $("#list2").getGridParam('selarrrow'); .我不明白你为什么这样做。如果不需要 onSelectRow 的参数你可以只使用 onSelectRow:function()这将使代码更加清晰。

第二个问题:您使用绑定(bind)到 change事件在 $("#mySelect").change ,但您在另一个事件中使用了语句 onSelectRow .因此,在每一行选择中,您都会有一个更多的事件处理程序来处理 change。事件。例如,您将替换 $("#mySelect").change(function (){ 的正文至 alert("changed!") .然后您将选择两个不同的行并更改“#mySelect”中的选项。您将看到两个 警报。然后选择另一行并更改“#mySelect”中的选项。您将看到三个 警报。等等。

所以你应该以任何方式重写你的代码。如果您仍然遇到同样的问题,您应该包括完整的演示代码(包括带有 <select id="mySelect">... 的 HTML 代码),它可以用来重现您的问题。

关于javascript - 如果方法 selarrrow 返回具有超过 1 个索引的数组,如何删除 jqgrid 中的多行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7488094/

相关文章:

javascript - 如何通过 $.ajax post 发布 javascript 变量和 html 表单?

javascript - jqgrid在navgrid中添加个人按钮

jquery-ui - jqGrid:Font Awesome 图标

php - 在同一网格上搜索多个日期选择器

jquery - jqGrid:当我单击网格外部或其他任何地方时如何失去焦点

javascript - 多种 Joi 验证类型

javascript - 如何切换 <tr> 的内容

javascript - Node JS : Not inserting into mongodb

jquery - jqGrid列组

php - 使用jqGrid生成发票