按住Ctrl键并单击以获取位置时,防止打开新标签页。

时间:2019-02-25 09:09:10

标签: javascript href

我有一个带有以下代码的Javascript函数。

function NodeClickActions(sender, eventArgs) {
    event.preventDefault();
    //Get whether user clicked CTRL key or not
    var bCtrlPressed = eventArgs.get_browserEvent().ctrlKey;
    //URL of the actions page
    var URL = "../Actions.aspx";
   //If CTRL key was pressed
    if (bCtrlPressed) {
      parent.MainPage.location.href = URL + "?PackageId=00000000-0000-0000-0000-000000000000&All=" + bCtrlPressed;
        }
      else {
        parent.MainPage.location.href = URL;
      }
    }

我需要停止在新标签页中打开页面。请注意,event.PreventDefault();不幸的是不会成功。

我了解这是由于浏览器行为而不是代码引起的。 任何建议都欢迎。问候!

3 个答案:

答案 0 :(得分:1)

这是最简单的方法,防止点击url比防止按下CTRL / CMD按钮要聪明得多,因为CTRL / CMD + CLICK之类的功能是浏览器功能,不能被覆盖(或者至少我没有这么做)取得成功)...

$(document).ready(function(){

    $("a").click(function(e){
        e.preventDefault();
        window.location.href = $(this).attr("href");
    });

});

根据您要使用的情况,您需要为表单提交应用类似的内容...,因为这也受此浏览器功能的影响

重要:使用Command + Click的OS X用户,请永远不要忘记

添加: 因为您要在绑定“单击”下禁用在新选项卡/窗口功能中打开,所以只需为contextmenu(鼠标右键)设置preventDefaults

$("a").contextmenu(function(e){
    e.preventDefault();
});

答案 1 :(得分:0)

检测是否按下ctrl键。使用Jquery轻松进行事件处理

var ctrl=false;
$(document).on('keydown',function(e){
    console.log(e.ctrlKey)
}).on('click','a[href]',function(e){
   if(!ctrl){
     e.preventDefault();
   }
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<a href="this?one">one</a>

答案 2 :(得分:0)

您需要直接在锚标记上添加侦听器,而不是使用事件委托并在父元素上添加侦听器。工作示例here

HTML

   <a href="https://gmail.com">Click Me</a>

JS:

$(document).ready(function ()
   {
      $("a").on('click',function(event)
      {debugger;
         event = event || window.event;
         event.preventDefault(); 
         event.stopPropagation();
        return false;
      });

});