Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 按下向下箭头键,单击事件被触发_Javascript_Jquery - Fatal编程技术网

Javascript 按下向下箭头键,单击事件被触发

Javascript 按下向下箭头键,单击事件被触发,javascript,jquery,Javascript,Jquery,在向下箭头键上,单击事件被触发,event.keycode未定义 $(".dropdown:not(.li-search) a.dropdown-toggle", ".navbar-collapse").on("click", function(event) { var target = $(this).attr("target"); if (event.keyCode !== '40'){ if (!$(".li-menu").is(":visible") &a

在向下箭头键上,单击事件被触发,event.keycode未定义

$(".dropdown:not(.li-search) a.dropdown-toggle", ".navbar-collapse").on("click", function(event) {

    var target = $(this).attr("target");

    if (event.keyCode !== '40'){
      if (!$(".li-menu").is(":visible") && target === undefined) {
        location.href=this.href;
      } else {
        window.open(this.href, '_blank');
      }
    }
});
在这段代码中,我试图在“新建”选项卡中打开主菜单,但外部链接在向下箭头键按下时打开

    $(".dropdown:not(.li-search) a.dropdown-toggle", ".navbar-collapse").on("click", function(event) {
    event.preventDefault();
    var target = $(this).attr("target");
    if(event.keyCode!=='40'){
     if (!$(".li-menu").is(":visible") && target===undefined) {
       location.href=this.href;
    }
        else {
     window.open(this.href,'_blank');
     }
     }
});
有关参考信息,请参阅键代码 为了为特定按键事件配置应用程序,当您按enter键时,标签将触发click事件。但是,事件上不会有
keyCode
,因为它不是
Key*
事件。如果您想知道
keyCode
还可以添加
keyDown
keydup
处理程序。您还可以通过执行以下操作来处理这两个问题:

$(".dropdown:not(.li-search) a.dropdown-toggle", ".navbar-collapse").on("click keydown", function(event) {

    var target = $(this).attr("target");
    if(event.type === 'keydown' && event.keyCode!=='40'){
       if (!$(".li-menu").is(":visible") && target===undefined) {
           location.href=this.href;
       }
       else {
           window.open(this.href,'_blank');
       }
   }
});

您可能还需要添加一个
事件.preventDefault()放在其中。

查看类
下拉切换
导航栏折叠
,我猜您正在使用引导

如果是这样,你看到的行为是合理的。让我们来分析一下问题:

  • 按下向下箭头键,单击事件被触发

    问:您只在
    单击事件上绑定了处理程序,那么为什么它在
    按键时被触发?
    答:因为这是引导下拉菜单的一个功能。为了获得更好的访问性,引导触发
    向上
    向下
    esc
    空格
    键的
    向下
    事件

  • event.keycode未定义

    由于它是一个
    点击
    事件处理程序,而不是一些键盘事件处理程序,如
    按键
    按键
    事件。按键代码
    应该是
    未定义的

  • 注意:在以下条件下使用严格等式

    if(event.keyCode!=“40”)

    这将检查操作数的类型和值。现在,event.keyCode总是返回一个
    Number
    ,而
    '40'
    是一个字符串,因此上述条件将产生
    false
    ,即使keyCode是40。您应该将其更正为:

    if(event.keyCode!==40)

  • 现在,如果要停止向下键重定向,应该检查触发的事件是原始事件还是由某些js逻辑触发的。为此,您可以选择jQuery的
    event.isTrigger
    event.originalEvent

  • 下面是一段代码片段:

    $(".dropdown:not(.li-search) a.dropdown-toggle", ".navbar-collapse").on("click", function(event) {
        var target = $(this).attr("target");
        // Check if NOT an triggered event
        if (!event.isTrigger) {
            if (!$(".li-menu").is(":visible") && target === undefined) {
                location.href = this.href;
            } else {
                window.open(this.href, '_blank');
            }
        }
    });
    

    同时添加您的html代码,不要忘记提及您正在使用哪些插件?Thanx很多朋友,如果(!event.isTrigger)有效,我喜欢您回答我问题的方式。谢谢