我的网格有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 {
}
});
}
});
});
});
答案 0 :(得分:2)
你的代码对我来说很奇怪。如果没有演示代码,我无法解释你所描述的效果,但我可以指出你应该重写的代码中的一些地方。
第一个问题:您在行id
中使用onSelectRow:function(id)
参数,然后使用相同的变量名id
来声明var id = $("#list2").getGridParam('selarrrow');
。我不明白你为什么这样做。如果您不需要onSelectRow
的参数,则只需使用onSelectRow:function()
即可使代码更清晰。
第二个问题:您在change
中使用绑定到$("#mySelect").change
事件,但您使用另一个事件onSelectRow
内的语句。因此,对于每一行选择,您将有另外一个change
事件的事件处理程序。例如,您可以将$("#mySelect").change(function (){
的正文替换为alert("changed!")
。然后,您将选择两个不同的行并更改“#mySelect”中的选项。您将看到两个警报。然后选择另一行并更改“#mySelect”中的选项。您将看到三个警报。等等。
所以你应该以任何方式重写你的代码。如果您仍然遇到同样的问题,则应该包含可用于重现问题的完整演示代码(包括带有<select id="mySelect">...
的HTML代码)。
答案 1 :(得分: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#Action
答案 2 :(得分:-1)
multiselect: true
,
在您的数据流程php $SQL .= "DELETE FROM ". $table. " WHERE no in ($_POST[id]);" ;