удалить J и K ключевых событий на twitter.com - PullRequest
5 голосов
/ 23 мая 2011

Я построил расширение для браузера, которое расширяет twitter.com. Он открывает модальное окно jQuery UI и имеет некоторые текстовые вводы. Когда я набираю эти входы, это работает, за исключением клавиш J и K. Эти ключи являются частью какого-то пользовательского события Twitter (прокрутка между твитами). Я могу получить все ключи для ввода буквы в поле, кроме этих двух.

Я хочу знать, как отменить привязку keypress к этим двум ключам, чтобы я мог получить эти две буквы для ввода. Есть идеи, как их связать? Я пытался поймать событие и предотвратить его по умолчанию ... не помогло. Я поймал это и возвратил истину / ложь, также никакая помощь. Пожалуйста, дайте мне знать.

Ответы [ 3 ]

4 голосов
/ 23 мая 2011

Это звучит очень похоже на проблему, с которой я столкнулся, когда Google изменил клавиши со стрелками вверх и вниз. Вот где Я решил это на SO после некоторой помощи.По сути, я остановил событие так (для меня это вверх и вниз, найдите коды клавиш для ваших j и k):

if (event.keyCode == 40 || event.keyCode == 38)  {
    event.cancelBubble = true;
    event.stopPropagation();            
    return false;
}
3 голосов
/ 23 мая 2011

Твиттер использует jQuery для привязки событий. Из консоли JavaScript мы можем проверить эти события:

$(document).data('events').keydown;
$(document).data('events').keypress;
$(document).data('events').keyup;

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

// Results in j/k keys no longer moving up/down
$(document).data('events').keypress = [];

Это, конечно, своего рода взломанный, но полезный способ сузить круг.

1 голос
/ 20 декабря 2011

Я столкнулся с той же проблемой с текстовыми полями и полями ввода на Twitter.com, когда создавал расширение для браузера для улучшения страницы. Я смог заставить все работать должным образом, нацеливаясь на определенные входные данные и текстовые области, созданные моим расширением, а затем остановив распространение события нажатия клавиши.

$("selector-for-inputs-created-by-extension")
    .bind("keypress", function(e) {
        e.stopPropagation();
    });

Надеюсь, это поможет прояснить ситуацию.

...