Как удалить прослушиватель событий JS без доступа к контексту, в котором он был создан? - PullRequest
0 голосов
/ 24 июня 2011

Моя компания использует Confluence для своей внутренней вики, и это нормально, за исключением того, что у редактора есть несколько сочетаний клавиш, которые приводят меня к стене.В частности, он использует ^ K для «вставки ссылки», когда я хочу, чтобы он соблюдал системное поведение по умолчанию «kill line».

Я отследил соответствующий код, который вставляет прослушиватель:

$("#markupTextarea").select(function () {
    AJS.Editor.storeTextareaBits(true);
}).keyup(function (e) {
    AJS.Editor.contentChangeHandler();

    if (e.ctrlKey) {
        if (e.keyCode == 75) {// bind ctrl+k to insert link
            return openLinkPopup(e);
        }
        if (e.keyCode == 77) {// bind ctrl+m to insert image
            $("#editor-insert-image").click();
            return false;
        }
    }
}).keydown(function (e) {
    // prevent firefox's default behaviour
    if (e.ctrlKey && e.keyCode == 75) {
        return AJS.stopEvent(e);
    }
}).change(function () {
    AJS.Editor.contentChangeHandler();
});

Для контекста кажется, что они используют настроенную версию TinyMCE.В идеале мне бы хотелось, чтобы пользовательский сценарий для Chrome уничтожал этих слушателей событий, но я даже не могу заставить их уйти, сделав что-то с ними в консоли Chrome JS.

То, что я пробовал (главным образом по предложению других людей; я не совсем звездный хакер JS):

$('markupTextarea').unbind('select') - говорит Object #<HTMLTextAreaElement> has no method 'unbind'

$('markupTextarea').removeEventListener - не работает, так как я неУ меня нет имени, чтобы ссылаться на этих слушателей по

У меня почти нет идей.

1 Ответ

0 голосов
/ 24 июня 2011

Ваш $ не является jQuery.

Напишите jQuery('#markupTextarea').unbind('select').

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