【问题标题】:jQuery Selectable metaKey event binding not the same as actual key pressjQuery Selectable metaKey 事件绑定与实际按键不同
【发布时间】:2012-01-24 19:08:56
【问题描述】:

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

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 保持选中状态。

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

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

【问题讨论】:

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


    【解决方案1】:

    在 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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-20
      • 1970-01-01
      相关资源
      最近更新 更多