如何删除 JS 事件侦听器而不访问创建它的上下文?

发布于 2024-11-17 05:02:07 字数 1220 浏览 3 评论 0原文

我的公司在其内部 wiki 中使用 Confluence,这很好,只是编辑器绑定了一些键盘快捷键,让我感到厌烦。特别是,当我希望它遵循“kill line”的系统默认行为时,它使用 ^K 表示“插入链接”。

我已经找到了插入监听器的相关代码:

$("#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 #没有方法 'unbind'

$('markupTextarea').removeEventListener -- 不起作用,因为我没有名字来引用这些侦听器,因为

我几乎已经出局了的想法。

My company uses Confluence for its internal wiki, which is fine, except that the editor has some keyboard shortcuts bound that drive me up the wall. In particular, it uses ^K for "insert link", when I want it to honor the system default behavior of "kill line".

I've tracked down the relevant code that inserts the listener:

$("#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();
});

For context, it seems like they're using a customized version of TinyMCE. Ideally, I'd like a userscript for Chrome that nukes these event listeners, but I can't even get them to go away by doing things to them in the Chrome JS console.

Things I've tried (mostly at other people's suggestion; I'm not exactly a stellar JS hacker):

$('markupTextarea').unbind('select') -- says Object #<HTMLTextAreaElement> has no method 'unbind'

$('markupTextarea').removeEventListener -- doesn't work since I don't have a name to reference these listeners by

I'm pretty much out of ideas.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

鹿! 2024-11-24 05:02:07

你的 $ 不是 jQuery。

编写jQuery('#markupTextarea').unbind('select')

Your $ isn't jQuery.

Write jQuery('#markupTextarea').unbind('select').

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文