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

时间:2019-08-04 21:32:55

标签: 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的设置就像在浏览器的控制台中手动设置时一样?

1 个答案:

答案 0 :(得分:1)

有两种解决方法-这些取决于您代码中的其他约束。最好的方法是在editorCallback()上调用mouseup

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

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

如果失败,您可以选择在短暂的超时后调用editorCallback()-想法是tinyMCE.activeEditor在超时持续时间过后初始化:

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

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

希望有帮助!