【问题标题】:jQuery: Function not being called after event triggerjQuery:事件触发后未调用函数
【发布时间】:2023-04-09 06:27:01
【问题描述】:

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

当我在控制台中执行触发命令时,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 设置为像我在浏览器控制台中手动设置时一样?

【问题讨论】:

  • 不确定我是否理解 - 当“真正的点击”发生时,您是否需要延迟对 editorCallback() 的呼叫?即,确保其他代码有时间分配activeEditor?
  • 通话需要在点击按钮后立即完成。所以你知道什么时候完成?
  • 好的 - 你试过了吗? editorSwitchTmce.bind( "mouseup", .. )
  • 事件不是我认为的问题。当我首先触发并添加 on keyup 时,一切正常。
  • 另一种选择可能是使用短暂的超时:editorSwitchTmce.bind( "click", function () { setTimeout(function() { editorCallback(); }, 100); } );

标签: javascript jquery


【解决方案1】:

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

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

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

如果不这样做,您可以选择在短暂超时后调用 editorCallback() - 想法是在超时持续时间过去后初始化 tinyMCE.activeEditor

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

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

希望有帮助!

【讨论】:

    猜你喜欢
    • 2018-03-17
    • 1970-01-01
    • 2012-12-18
    • 1970-01-01
    • 1970-01-01
    • 2018-07-28
    • 2012-11-25
    • 1970-01-01
    • 2018-12-14
    相关资源
    最近更新 更多