按下特殊键时的jqGrid多选行为
Posted
技术标签:
【中文标题】按下特殊键时的jqGrid多选行为【英文标题】:jqGrid multiselect behavior when pressing special key 【发布时间】:2011-04-12 16:34:10 【问题描述】:我对多选行为的期望是只要没有按下特殊键就可以正常运行。我的意思是,如果您选择了一行并单击另一行而没有按下其他键,那么它应该选择新行并取消选择旧行。好吧,jqGrid 的标准选项让您在始终常规行为或始终多选之间进行选择。只有在按下特殊键时才能进行多选。
有什么方法可以实现吗?
【问题讨论】:
【参考方案1】:jqGrid 有几种选择策略,都使用multiselect:true
。为了演示,我创建了三个示例:
-
如果您只定义
multiselect:true
:http://www.ok-soft-gmbh.com/jqGrid/DataToMultiSelect2.htm。这是您不喜欢的标准行为。
如果您另外定义multiboxonly:true
:http://www.ok-soft-gmbh.com/jqGrid/DataToMultiSelect3.htm。在我看来,这种行为正是您所需要的。
如果您另外定义multikey:"ctrlKey"
:http://www.ok-soft-gmbh.com/jqGrid/DataToMultiSelect4.htm。只有在按下 Ctrl 时才会选择或取消选择该行。
如果我正确理解您的问题,您应该同时定义 multiselect:true
和 multiboxonly:true
以接收您喜欢的行为。
如果我误解了您的问题,而您的意思是其他意思,请根据上述示例换一种说法。
【讨论】:
谢谢! @Oleg ...multiboxonly:true 表示我无法隐藏复选框..因为我正在使用 ('hidecol','cb') 隐藏我的多选复选框..隐藏复选框时可以吗? 我可以像 beforeSelectRow 一样使用 beforeSelectRow 来实现:function (rowid, e) if (!e.ctrlKey) $("#list10").resetSelection(); 返回真;并设置 multiselect:true .....如果我做错了什么请告诉我【参考方案2】:我刚刚遇到了同样的问题,想以某种方式模仿这样的行为: - 单击 jqGrid 的行时单选 - 键单击行时多选(如 CTRL + 单击)
我的解决方案使用 jqGrid 的“beforeSelectRow”事件,该事件将点击事件传递给它的处理程序。处理程序区分普通点击和“键控”点击。按键点击通过,普通点击首先消除先前的选择,然后允许事件冒泡。
function(rowid,e)
if (e.ctrlKey==true)
return true;//CTRL clicked-->multi select
else
$('#CoolGrid').jqGrid('resetSelection');//Reset existing select
return true;//Pass through new item selection
当然你可能想缩短一点,但我认为这样看起来更清晰。
您既不需要 multikey 也不需要 multiboxonly 选项。当然,多选选项必须设置为 true。
【讨论】:
以上是关于按下特殊键时的jqGrid多选行为的主要内容,如果未能解决你的问题,请参考以下文章
怎么在jqgrid中设置checkbox多选,怎么获取多选的值