在向下箭头KeyPress上,click事件被触发

时间:2016-11-04 12:34:55

标签: javascript jquery

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

$results = array(
  "year"=>2015,
   // etc
);

json_encode($results);

在此代码中我尝试在新标签页中打开主菜单,但外部链接在向下箭头按键

上打开

3 个答案:

答案 0 :(得分:1)

调用preventDefault()函数。

    $(".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');
     }
     }
});

请参阅参考的密钥代码https://css-tricks.com/snippets/javascript/javascript-keycodes/ 为特定关键事件配置您的应用

答案 1 :(得分:0)

当您按下Enter键时,

<a>标记将触发click事件。但是,您不会在活动中使用keyCode,因为它不是Key*活动。如果您想知道keyCode也添加keyDownkeyUp处理程序。您也可以通过执行以下操作来处理两者:

$(".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');
       }
   }
});

如果您希望阻止默认浏览器行为发生,您可能还想在其中添加event.preventDefault();

答案 2 :(得分:0)

查看课程dropdown-togglenavbar-collapse,我猜你正在使用 Bootstrap 库。

如果是这种情况,您所看到的行为是合理的。让我们分解问题:

  1. 在向下箭头按键上,点击事件被解雇

    问:您只绑定click事件上的处理程序,为什么会在keypress上触发? 答:因为这是bootstrap下拉列表的一个功能。为了获得更好的可访问性,bootstrap会在click keydownupdownesc键上触发space事件。

  2. event.keycode未定义

    由于它是click事件处理程序,而不是某些键盘事件处理程序,如keydownkeypressevent.keyCode应为undefined

    < / LI>
  3. 注意:您在以下条件中使用严格相等

    if (event.keyCode !== '40')

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

    if (event.keyCode !== 40)

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

  5. 这是一个代码段:

    $(".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');
            }
        }
    });