jQuery click事件 - 如何判断鼠标是否被点击或输入键被按下了?

Jos*_*ola 6 javascript jquery onclick

我在我的网站上有一个可用性问题.我有一组标签,每个标签都包含一个表格.当您单击选项卡链接时,它会将焦点放在选项卡内容正文中的第一个文本框中.面向鼠标的人喜欢这个"功能".问题是面向键盘的用户使用键盘上的TAB键来浏览选项卡.他们在他们想要查看的选项卡上按Enter键,点击事件触发并显示选项卡,但焦点是文本框,完全调整其Tab键顺序.因此,当他们再次点击标签时,他们想要转到屏幕上的下一个标签,但由于焦点已移动到表单中,因此无法使用键盘轻松访问下一个标签.

因此,在click事件中,我需要确定他们是否用鼠标按钮实际点击了它.这可能吗?我的第一次尝试是这样的:

$("#tabs li a").click(function(e) {
  var tab = $(this.href);
  if(e.keyCode != 13)
    $("input:first", tab).focus();
});
Run Code Online (Sandbox Code Playgroud)

keyCode总是0. which财产也总是0.请帮忙!

Jos*_*ola 4

这是我想出的解决方案,它非常简单。我在选项卡链接上捕获了 keydown,并在 keyCode 为 13 时触发了 click 事件。幸运的是,该trigger函数允许我们将额外的参数传递给事件处理程序...

$("#tabs li a").keydown(function(e) {
  if(e.keyCode == 13) {
    $(this).trigger("click", true);
    e.preventDefault();
  }
});
Run Code Online (Sandbox Code Playgroud)

所以我只需更改我的点击处理程序即可接收新参数并使用它......

$("#tabs li a").click(function(e, enterKeyPressed) {
  if(enterKeyPressed)
    alert("Enter key");
  else
    alert("Clicked");
});
Run Code Online (Sandbox Code Playgroud)

我也在jsFiddle 上发布了一个演示。感谢所有阅读该问题的人。