Запретить поведение по умолчанию в ключевых прослушивателях в YUI
-
03-07-2019 - |
Вопрос
У меня есть веб-страница, где я хотел бы переназначить Ctrl + N на другое поведение.Я последовал примеру YUI с регистрацией прослушивателей ключей, и моя функция вызвана, но Firefox по-прежнему создает новое окно браузера.Кажется, в IE7 все работает нормально.Как мне остановить отображение нового окна?
Пример:
var kl2 = new YAHOO.util.KeyListener(document, { ctrl:true, keys:78 },
{fn:function(event) {
YAHOO.util.Event.stopEvent(event); // Doesn't help
alert('Click');}});
kl2.enable();
Можно удалить поведение по умолчанию.Google Docs переопределяет Ctrl + S, чтобы сохранить ваш документ вместо вызова диалогового окна сохранения Firefox.Я попробовал приведенный выше пример с помощью Ctrl + S, но диалоговое окно сохранения Firefox по-прежнему появляется.Поскольку Google может запретить отображение диалогового окна сохранения, я уверен, что есть способ предотвратить большинство сочетаний клавиш по умолчанию.
Решение
Хитрость в том, что функция 'fn' - это удар.
Экспериментально вы можете видеть, что тип функции для fn принимает два параметра.Первый параметр фактически содержит ТИП события.Второй содержит...и это странно:массив, содержащий кодовую точку с индексом 0 и фактический объект события с индексом 1.
Итак, немного изменив ваш код, это следует выглядеть вот так:
function callback(type, args)
{
var event = args[1]; // the actual event object
alert('Click');
// like stopEvent, but the event still propogates to other YUI handlers
YAHOO.util.Event.preventDefault(event);
}
var kl2 = new YAHOO.util.KeyListener(document, { ctrl:true, keys:78 }, {fn:callback});
kl2.enable();
Кроме того, из любви к lisp, не используйте необработанные кодовые точки в своем коде.Используйте 'N'.charCodeAt(0) вместо "78".Или оберните это как функцию
function ord(char)
{
return char.charCodeAt(0);
}
Другие советы
Я просто предполагаю здесь, но я не думаю, что это возможно сделать.
Если это возможно, то этого определенно не должно быть.Общие сочетания клавиш - это то, с чем вам не следует связываться.Что же дальше?Нажмите кнопку закрытия окна, чтобы открыть новое окно...
Используя утилиту событий YUI, вы могли бы попробовать использовать Стоп - событие способ:
Однако, поскольку большинство пользователей привыкли к тому, что эти нажатия клавиш выполняют определенные действия в браузере (новое окно в вашем примере), я всегда избегаю столкновений, что фактически означает, что я не использую ни одну из клавиш meta или control.
Я просто использую буквы сами по себе, и это нормально, пока у вас нет полей для ввода текста, так что этот небольшой совет может оказаться для вас менее полезным.
Хотя переопределение ярлыков браузера по умолчанию не является тривиальным делом, в некоторых случаях это стоит сделать, поскольку это придает приложению более профессиональный вид.Взгляните на этот скрипт:
http://www.openjs.com/scripts/events/keyboard_shortcuts/index.php#disable_in_input
Оказывается, у меня это прекрасно работает..