javascript - jQuery:事件触发后未调用函数

标签 javascript jquery

我目前正在尝试根据触发的“点击”事件调用回调。这种方法是一种注销方式,仅在单击按钮后才可用。

当我在控制台中执行触发命令时,keyup 事件处理程序在触发后按预期工作。

但是尝试使用以下代码自动执行此过程不起作用:

let editorSwitchTmce = jQuery( ".wp-editor-tabs .switch-tmce" ),
    editorCallback = function() {
    tinyMCE.activeEditor.on( "keyup", function () {
        console.log( tinyMCE.activeEditor.getContent() );
    });
};

editorSwitchTmce.bind("click", function () {
    editorCallback();
});

editorSwitchTmce.trigger( "click" );

问题是,在单击之前 activeEditor 为空。那么为什么这不起作用?我的意思是我正在触发点击并期望 activeEditor 设置得像我在浏览器控制台中手动设置一样?

最佳答案

有两种方法可以解决此问题 - 这些取决于代码中的其他约束。更好的方法是在 mouseup 上调用 editorCallback():

editorSwitchTmce.bind( "mouseup", function () {
    editorCallback();
});

这假设您的应用中其他地方的其他代码在该点击阶段的 mouseup 事件之前已初始化 tinyMCE.activeEditor

如果做不到这一点,您可以选择在短暂的超时后调用 editorCallback() - 这个想法是 tinyMCE.activeEditor 在超时持续时间结束后初始化:

editorSwitchTmce.bind( "click", function () {
    setTimeout(function() {
        editorCallback();
    }, 100);
});

超时方法实际上是解决此问题的最后一道“逃生 channel ”(即,如果您无法更正应用程序的整体设计等)。它可能会导致微妙的系统或短暂的视觉副作用,因此请谨慎使用。

希望对您有所帮助!

关于javascript - jQuery:事件触发后未调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57350351/

相关文章:

javascript - 确保两个函数依次执行,其中第一个函数内部有异步调用

javascript - 使用 Q promises 串行执行

javascript - Vue Nuxt Axios : cross-domain POST w/proxy

javascript - 起初它说它不是一个函数,现在它只是什么也没做

c# - 在 MVC 4 脚本部分初始化 jQuery DataTable 时隐藏表数据的最佳方法是什么

jquery - 如何从 jquery 访问表格单元格

javascript - 过滤 Axios 响应

javascript - 修复滚动上的位置元素并在到达父级末尾时删除

javascript - jQuery选择div问题

javascript - 如何让jquery停止执行1秒