1

我目前正在为使用 jQuery 和 jQuery ui 的产品开发 Web 界面。在我们的产品中,我们在顶部有一个标签条。最后一个选项卡是“新选项卡”选项卡,当用户单击它时,它会为用户创建一个新选项卡(它的工作方式与大多数现代浏览器中的选项卡式浏览非常相似)。目前,我正在“新选项卡”选项卡上捕获选择事件,并且在回调函数中,我正在做所有工作来创建一个新选项卡并显示它。我遇到的最初问题是未选择新选项卡(即使我告诉 jQuery ui 选项卡选择它)。发生的事情是 jQuery ui 选项卡确实选择了我创建的新选项卡。但是,一旦我的回调完成执行,jQuery ui 就会继续并重新选择“新选项卡”选项卡。换句话说,执行流程是:

  1. 用户点击“新标签”标签
  2. 一些 jQuery ui 代码执行
  3. jQuery ui 调用我的回调函数
  4. 我的回调函数创建一个新选项卡
  5. 我的回调函数选择了那个新标签
  6. jQuery ui 执行更多代码,将选择效果应用于“新选项卡”选项卡

我目前正在通过将我的回调函数放在 setTimeout 调用中来解决这个问题。这是有效的,因为它会导致我的回调函数在所有 jQuery ui 代码执行后被调用。

我的问题是:有没有办法在没有 setTimeout 的情况下实现我想要做的事情?

我觉得使用 setTimeout 来控制执行流程是 hacky 并且可能会导致问题。我一直在寻找一个选定的事件,但无济于事。

这是我的代码:

$tabs.tabs("option", "select", function(event, ui){
    if( ui.panel.id === tab_id_prefix + "plus-tab"){
        setTimeout( function(){
            tab_set_obj.newTab({}).setTabPage({
                page:       initial_page,
                context:    initial_context,
                title:      initial_title,
                select:     true
            });
        }, 0);
    }
});

编辑:我可以选择正确的选项卡。问题是时间问题之一。我的代码当前的结构方式要求我在 jQuery UI 完成所有工作后选择我想要的选项卡。我目前正在通过使用 setTimeout 来做到这一点,但想知道是否有更好的方法。

谢谢

4

0 回答 0