在向下箭头按键上,单击事件被触发,event.keycode未定义
$results = array(
"year"=>2015,
// etc
);
json_encode($results);
在此代码中我尝试在新标签页中打开主菜单,但外部链接在向下箭头按键
上打开答案 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)
<a>
标记将触发click事件。但是,您不会在活动中使用keyCode
,因为它不是Key*
活动。如果您想知道keyCode
也添加keyDown
或keyUp
处理程序。您也可以通过执行以下操作来处理两者:
$(".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-toggle
,navbar-collapse
,我猜你正在使用 Bootstrap 库。
如果是这种情况,您所看到的行为是合理的。让我们分解问题:
在向下箭头按键上,点击事件被解雇
问:您只绑定click
事件上的处理程序,为什么会在keypress
上触发?
答:因为这是bootstrap下拉列表的一个功能。为了获得更好的可访问性,bootstrap会在click
keydown
,up
,down
和esc
键上触发space
事件。
event.keycode未定义
由于它是click
事件处理程序,而不是某些键盘事件处理程序,如keydown
或keypress
,event.keyCode
应为undefined
注意:您在以下条件中使用严格相等
if (event.keyCode !== '40')
这将检查操作数的类型和值。现在,event.keyCode总是返回Number
,而'40'
是一个字符串,因此即使keyCode为40,上述条件也会产生false
。您应该将其更正为:
if (event.keyCode !== 40)
现在,如果要停止重定向向下键,则应检查触发的事件是原始事件还是由某些js逻辑触发。为此,您可以选择jQuery&#39; 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');
}
}
});