jQuery - запуск события клика по ссылкам с пробелом? - PullRequest
9 голосов
/ 12 марта 2010

Похоже, что в большинстве браузеров <input type="submit"> обрабатывает [пробел] и [ввод] как щелчок, но ссылка <a> рассматривает только [ввод] как щелчок.

Мое приложение использует ряд ссылок, отформатированных для имитации кнопок, поэтому пользователь, привыкший вкладывать кнопки и нажимать [пробел], будет разочарован.

Этот бит jQuery решает проблему:

$("a.Button").die("keypress").live("keypress", function(e) {
    if (e.which == 32) {
        $(this).trigger("click");
        e.preventDefault();
    }
});

Мой вопрос: есть ли причина этого не делать? Я немного не хочу переопределять поведение браузера по умолчанию на чем-то базовом, как это, но так как я уже злоупотребляю тегом ссылки, чтобы он выглядел как кнопка, по крайней мере, так я не нарушаю ожиданий пользователя. в дальнейшем.

Ответы [ 2 ]

6 голосов
/ 12 марта 2010

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

Если вы переопределили отображение ссылок, превратив их в кнопки, пользователь должен иметь возможность обрабатывать эти «кнопки» точно так же, как если бы это была настоящая кнопка, иначе вы будете путать и раздражать пользователей, которые потратили годы с этим «выученным» поведением.

0 голосов
/ 12 марта 2010

Существуют стандартные проблемы юзабилити.

Я думаю, что «похоже» является ключевым здесь. Если кто-то использует программу чтения с экрана, он «увидит» ссылку и будет действовать соответствующим образом.

Если у кого-то отключен javascript, функция jquery (очевидно) не запустится, и они также получат поведение ссылки.

Очевидно, что вы уже проделали поиск души (!), Используя ссылку, например кнопку, поэтому мы имеем дело с этими двумя случаями - программа чтения с экрана и не JavaScript.

Если вы не можете также смоделировать поведение кнопки (на ссылке) для этих двух случаев, то вы будете предлагать разным людям разный опыт - это хорошая причина не использовать эту функцию. Либо пробел должен запускать каждое использование этих ссылок / кнопок, либо ни одно из них.

...