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