Запретить поведение по умолчанию в ключевых прослушивателях в YUI

StackOverflow https://stackoverflow.com/questions/166127

  •  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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top