jQuery click event - Как узнать, была ли нажата мышь или нажата клавиша ввода? - PullRequest
6 голосов
/ 13 сентября 2011

У меня есть проблема с юзабилити на моем веб-сайте.У меня есть набор вкладок, каждая из которых содержит форму.Когда вы нажимаете на ссылку вкладки, она фокусируется на первом текстовом поле в теле содержимого вкладки.Люди, ориентированные на мышь, любят эту «особенность».Проблема заключается в том, что пользователи, ориентированные на клавиатуру, используют клавишу TAB на клавиатуре для перехода по вкладкам.Они нажимают Enter на вкладке, на которую они хотят посмотреть, происходит событие щелчка, и вкладка отображается, но фокус отдается текстовому полю, полностью настраивая порядок их вкладок.Поэтому, когда они снова нажимают на вкладку, они хотят перейти к следующей вкладке на экране, но поскольку фокус был перемещен внутри формы, они не могут легко перейти на следующую вкладку с помощью клавиатуры.

Итак,внутри события click мне нужно определить, действительно ли они щелкали по нему кнопкой мыши.Это возможно?Моя первая попытка была такой:

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

Но keyCode всегда равно 0. Свойство which также всегда равно 0. Пожалуйста, помогите!

Ответы [ 2 ]

4 голосов
/ 13 сентября 2011

Вот решение, которое я придумал, оно удивительно просто.Я перехватил нажатие клавиш на вкладках и вызвал событие нажатия, когда keyCode было 13. К счастью, функция trigger позволяет нам передавать дополнительные параметры в обработчик событий ...

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

Так что мне просто нужно было изменить свой обработчик кликов, чтобы получить новый параметр и использовать его ...

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

Я также выложил демо на jsFiddle .Спасибо всем, кто прочитал вопрос.

0 голосов
/ 13 сентября 2011

Будет ли работать глобальная переменная "focus", которая отключит фокус на настройке мыши после использования вкладки на данной вкладке, пока мышь не будет перемещена в новый блок.

Это не будет функция, которую вы запрашиваете,но я верю, что это может дать вам то, что вы ищете.

например.Опция 5 при наведении курсора мыши, вы нажимаете клавишу Tab, теперь вы сохраняете 5 в переменной, не позволяя фокусироваться на 5, пока что-то еще не будет сфокусировано, но, как только что-то еще будет сфокусировано, глобальное возвращение к -1.

Не самый чистый обходной путь, я признаю это свободно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...