如何删除 JS 事件侦听器而不访问创建它的上下文?
我的公司在其内部 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 #
$('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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
你的
$
不是 jQuery。编写
jQuery('#markupTextarea').unbind('select')
。Your
$
isn't jQuery.Write
jQuery('#markupTextarea').unbind('select')
.