2

我正在使用 jQuery UI 可选组件。为了允许在不按住控制/命令的情况下进行多项选择,我有以下内容:(来自另一个线程)

jQuery("#myUnorderedList").bind("mousedown", function(event) {
    return event.metaKey = true;
}).selectable();`

这适用于选择多个项目并允许拖动选择。问题在于将 mousedown 绑定到 metaKey 不会提供与实际按住命令/控制键相同的行为。

这是显示行为的简短截屏视频 -截屏视频示例

这是关于 jsfiddle 的示例(来自另一个用户,而不是我自己) - metaKey 设置为 true

在 jfiddle 示例中,假设您通过单击和拖动来选择前 4 个。现在选择了 4 个。由于 metaKey 设置为 true,我们可以单击 5 或 6 添加到选择中。相反,如果您单击并拖动 5 并向上拖动 4(已选中),然后在不释放鼠标的情况下拖动回 5,则 4 将变为未选中状态。

尝试同样的事情,但这次持有命令/控制。如果选择了前 4 个,则单击并在 5 上拖动(仍然按下命令/控制)在 4 上然后再向下拖动,4 保持选中状态。

基本上,它在被拖动时使选定的项目未选中,但按下命令/控制键时,被选中的项目保持选中状态。

我已经控制台记录了每个停止、启动、选择、取消选择事件的 metaKey,当 metaKey 绑定到 mousedown 时,它都返回 true,但行为与实际按住命令键不同。

4

1 回答 1

0

They behavior of the meta key has changed in jQuery 1.7.

See Bug #10666 @bugs.jquery.com:

Prior to jQuery 1.7

event.metaKey was assigned based on this code:

 if ( !event.metaKey && event.ctrlKey ) {
      event.metaKey = event.ctrlKey;
 }

But now, in jQuery 1.7 code's been changed to the following:

 if ( event.metaKey === undefined ) { 
     event.metaKey = event.ctrlKey;
 }

And that code means that if we metaKey is undefined, then and only then we assign ctrlKey to metaKey.

于 2012-03-13T19:31:19.830 回答