【问题标题】:Ctrl+click on links with click handlersCtrl+单击带有单击处理程序的链接
【发布时间】:2012-10-27 02:13:40
【问题描述】:

我有一个链接(锚点),它附加了一个 href 以导航到特定的 URL,例如“www.bla.com”。

<a href='http://www.bla.com' />

我还有一个附加到链接的click 处理程序,该处理程序执行一些操作,然后在同一窗口中打开一个html 视图。一切都运行良好。

但是,当用户使用“ctrl+click”在新选项卡/窗口中打开链接时,单击处理程序似乎优先并在同一窗口中打开 html 视图。但我想保留“ctrl+click”行为并允许用户在新选项卡/窗口中打开链接(就像普通链接一样)。我怎么能这样做?

提前致谢!

【问题讨论】:

  • 您在处理程序中使用什么?我尝试复制它,唯一能阻止它的是alert
  • 有很多键可以改变默认行为。你最好使用filter-altered-clicks之类的东西来为你处理。

标签: javascript html browser hyperlink


【解决方案1】:
function process(e){
   var evt = e ? e:window.event;
   if(evt.ctrlKey)
      alert("ctrlClicked");
}​

如果按下控制键,evt.ctrlKey 将返回 true,您可以在“if”块中编写条件,我仅针对 chrome 和 ff 进行了测试。

【讨论】:

    【解决方案2】:

    也许是这样的?

    function onclick(e){
       var event = e ? e:window.event;
       this.target = event.ctrlKey?"_blank":"_self";
    }​
    

    【讨论】:

      【解决方案3】:

      如果在单击发生时按下了控制键(或等效键),则关联的click event object 将其ctrlKey 属性设置为true。检查事件对象,如果控制键被按下,不要做“HTML 视图”的事情。

      <a href="#" onclick="alert(event.ctrlKey);">Click me!</a>
      

      但是,如果用户以其他方式激活链接,您可能会或可能不会收到点击事件。

      例如

      1. 右键 -> “在新标签页/窗口中打开” - 无点击事件(Firefox、IE)
      2. Tab 以关注链接,按 Enter - 调度点击事件(Firefox、IE)

      【讨论】:

        【解决方案4】:
        <a target="_blank" href='http://www.bla.com' />
        

        在锚标记中添加 target="_blank"。

        【讨论】:

        • 这行不通,我担心,因为 _blank 即使在标准点击时也会在新标签/窗口中打开链接(不是我想要的)。
        • 您可以添加一个按键监听器来检测何时按住 ctrl,然后只需根据是否按住它来更改目标参数。 (持有?“_blank”:“_self”)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-24
        • 1970-01-01
        • 2017-07-29
        • 2010-09-10
        • 2012-07-23
        相关资源
        最近更新 更多