Предотвращение поведения по умолчанию в ключевых прослушивателях в 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

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

Другие вопросы по тегам