我正在使用jQuery UI Selectable组件。为了允许多次选择而不按住控制/命令,我有以下内容:(来自另一个线程)
jQuery("#myUnorderedList").bind("mousedown", function(event) {
return event.metaKey = true;
}).selectable();`
这适用于选择多个项目并允许拖动选择。 问题是将mousedown绑定到metaKey并不提供与实际持有命令/控制键相同的行为。
这是一个简短的截屏视频,展示行为 - screencast example
以下是jsfiddle的示例(来自其他用户,而非我自己) - metaKey set to true
在jfiddle示例中,假设您通过单击并拖动来选择前4个。现在选择了4个。由于metaKey设置为true,我们可以单击5或6添加到选择中。相反,如果您单击并向上拖动5并向上拖动超过4(已经选中),则在不释放鼠标的情况下拖回到5,然后4将变为未选中状态。
尝试相同的事情,但这次持有命令/控制。如果选择了前4个,则单击并向上拖动5(仍按下命令/控制按钮)向上超过4并向后拖动,选择4个保持。
基本上它是在拖动时取消选择选定的项目,但是按下命令/控制键,选择的项目保持选中状态。
我有console.log为每个停止,启动,选择,取消选择事件的metaKey,当metaKey绑定到mousedown时它都返回true,但行为与实际按住命令的行为不同键。
答案 0 :(得分:0)
在jQuery 1.7中,元键的行为发生了变化。
请参阅Bug #10666 @bugs.jquery.com:
在jQuery 1.7之前
event.metaKey
是根据以下代码分配的:
if ( !event.metaKey && event.ctrlKey ) {
event.metaKey = event.ctrlKey;
}
但是现在,在jQuery 1.7代码中已经改为:
if ( event.metaKey === undefined ) {
event.metaKey = event.ctrlKey;
}
并且该代码意味着如果我们metaKey未定义,那么只有 然后我们将ctrlKey分配给metaKey。