jQuery Selectable metaKey事件绑定与实际按键不一样

时间:2012-01-24 19:08:56

标签: jquery jquery-ui jquery-ui-selectable

我正在使用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,但行为与实际按住命令的行为不同键。

1 个答案:

答案 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。