jqGrid 行已选中但未突出显示

jqGrid row selected but not highlighted

我想通过单击多次选择和取消选择一行。

到目前为止,我的代码是:(lastSelected is a global var):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
beforeSelectRow: function (id)
{
   if (lastSelected !== id)
   {
     grid.setSelection(id);
     lastSelected = id;
     return;
   }
   else
   {
     grid.resetSelection(id);
     lastSelected = null;
   }
}

代码工作正常,但只有在第一次单击后才会突出显示行。第二次点击取消突出显示它,当我下次点击它时它一直不突出显示,但在第 3 次,第 5 次之后......点击它的行为就像选择了(我有在选择行时弹出的模式),但没有突出显示。

没有 grid.getSelection(id) 它根本不会突出显示,但仍然像选择和取消选择一样工作。


在我看来,您的代码中的主要错误是 beforeSelectRow 的返回值。如果返回的值不在 false 中,则将继续标准处理,并且可以取消选择您先前通过使用 setSelection 显式选择的行。

要解决问题,您应该从 beforeSelectRow 返回 false。另外,我建议使用 $(this) 而不是 grid 变量,并使用 jqGrid 的标准 selrow 参数而不是使用 lastSelected 变量。生成的代码可能如下

1
2
3
4
5
6
7
8
9
10
11
beforeSelectRow: function (rowid, e) {
    var $self = $(this), selectedRowid = $self.jqGrid("getGridParam","selrow");

    if (selectedRowid === rowid) {
        $self.jqGrid("resetSelection");
    } else {
        $self.jqGrid("setSelection", rowid, true, e);
    }

    return false; // don't process the standard selection
}

对应的demo在这里。