Предотвращение поведения по умолчанию в ключевых прослушивателях в YUI - PullRequest
4 голосов
/ 03 октября 2008

У меня есть веб-страница, где я хотел бы переназначить 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 ]

7 голосов
/ 24 апреля 2009

Хитрость в том, что функция '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);
}
0 голосов
/ 14 ноября 2008

Используя утилиту обработки событий YUI, вы можете попробовать и использовать метод stopEvent :

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

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

0 голосов
/ 23 февраля 2009

Хотя переопределение ярлыков браузера по умолчанию не тривиально, в некоторых случаях это стоит сделать, так как это дает более профессиональный вид приложения. Взгляните на этот скрипт:

http://www.openjs.com/scripts/events/keyboard_shortcuts/index.php#disable_in_input

Оказывается, у меня работает нормально ..

0 голосов
/ 03 октября 2008

Я просто догадываюсь здесь, но я не думаю, что это можно сделать.

Если это возможно, это определенно не должно быть. Общие сочетания клавиш - это то, с чем вам не следует связываться. Что дальше? Нажмите кнопку закрытия окна, чтобы открыть новое окно ...

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