Предотвращение поведения по умолчанию в ключевых прослушивателях в YUI
У меня есть веб-страница, где я хотел бы переназначить Ctrl+N на другое поведение. Я последовал примеру регистратора Key Listeners от 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 переопределяют Ctrl+S, чтобы сохранить ваш документ, вместо вызова диалогового окна сохранения Firefox. Я попробовал приведенный выше пример с Ctrl+S, но диалоговое окно сохранения Firefox по-прежнему всплывает. Так как Google может остановить запуск диалога сохранения, я уверен, что есть способ предотвратить большинство сочетаний клавиш по умолчанию.
4 ответа
Хитрость в том, что функция '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, вы можете попробовать использовать метод stopEvent:
Однако, поскольку большинство пользователей привыкли к тому, что эти нажатия клавиш выполняют определенную функцию в браузере (новое окно в вашем примере), я всегда избегаю столкновений, что фактически означает, что я не использую ни одну из мета или управляющих клавиш.
Я просто использую буквы по отдельности, и это нормально, пока у вас нет полей для ввода текста, так что этот совет может быть менее полезным для вас.
Я просто догадываюсь здесь, но я не думаю, что это можно сделать.
Если это возможно, это определенно не должно быть. Общие сочетания клавиш - это то, с чем вам не следует связываться. Что дальше? Нажмите кнопку закрытия окна, чтобы открыть новое окно...
Хотя переопределение ярлыков браузера по умолчанию не тривиально, в некоторых случаях это стоит сделать, так как это дает более профессиональный вид приложения. Посмотрите на этот скрипт:
http://www.openjs.com/scripts/events/keyboard_shortcuts/index.php
Оказывается, у меня работает нормально..