You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

jQuery.tabs无load方法报错:如何重新加载Tab并初始化组件?

问题描述

我使用jQuery Tabs加载不同文件,第三个Tab对应createMeeting.jsp,内含AJAX提交表单。提交成功后页面会显示“successful!!”及“Add another one”链接,需要重新加载原始表单。

由于Tab的load事件负责初始化日期选择器等组件,因此必须重新加载Tab内容,而非仅切换显示。

现有代码

Tab结构代码

<div id="tabs" style="border:0px;">
<ul>
    <li><a href="someFile.jsp" class="myMenu">title 1</a></li>
    <li><a href="anotherFile.jsp" class="myMenu">title 2</a></li>
    <li><a href="createMeeting.jsp" class="myMenu">title 3</a></li>
</ul>
</div>

Tab初始化代码

$('#tabs').tabs({
    cache: true,
    load: function(event, ui) {
        var active = $('#tabs').tabs( "option", "active" );
        if (active == 2){
            $('#amstart').addClass('selectedRadio');
            $( "input[type=submit]" ).button();
            theCalendar(); // 初始化日期选择器
        }           
    }
});

表单提交代码

$('#ui-tabs-3').on('click', '#submitBtn', function(event) {
    event.preventDefault();
    
    // ... 表单验证逻辑 ...

    myData =  $("#formMeeting").serialize();

    $.ajax({
        url: './meeting_details.jsp',
        type: 'POST',
        data: myData,
        success: function(data){
            $('#ui-tabs-3').html(data);
        },
        error: function (request, status, error) {
            alert(request.responseText);
        }
    });
});

提交成功后的链接代码

<a id="createAnotherMeeting" class="vacanteItem" href="createMeeting.jsp">Add another one</a>

报错的点击事件代码

尝试以下三种写法均报错Uncaught Error: Method load does not exist on jQuery.tabs:

$("#ui-tabs-3").on("click", "#createAnotherMeeting", function(e){
    e.preventDefault();
    $("#tabs").tabs("load",2); // option 1
    $("#tabs").tabs("load",$(this).attr('href')); // option 2
    $(this).parent().tabs("load",2); // option 3
});

需求:点击“Add another one”链接时,重新加载第三个Tab并完成日期选择器、按钮等组件的初始化。


解决方案

原因说明

jQuery UI 1.9及后续版本已移除tabs("load")方法,因此直接调用会触发错误。要实现Tab内容重新加载并触发初始化逻辑,可采用以下两种方案:


方案一:清除缓存后重新激活Tab

利用cache配置,先移除目标Tab的缓存数据,再重新激活Tab触发load事件:

$("#ui-tabs-3").on("click", "#createAnotherMeeting", function(e){
    e.preventDefault();
    const tabIndex = 2; // 第三个Tab的索引(从0开始)
    
    // 临时关闭缓存
    $("#tabs").tabs("option", "cache", false);
    // 清空Tab面板内容(可选,避免加载前显示旧内容)
    $("#tabs").tabs("option", "panels").eq(tabIndex).empty();
    // 重新激活Tab,触发load事件执行初始化
    $("#tabs").tabs("option", "active", tabIndex);
    // 恢复缓存设置(如果需要保留其他Tab的缓存)
    $("#tabs").tabs("option", "cache", true);
});

方案二:更新Tab链接并强制加载

通过给链接添加时间戳规避浏览器缓存,再重新激活Tab:

$("#ui-tabs-3").on("click", "#createAnotherMeeting", function(e){
    e.preventDefault();
    const tabIndex = 2;
    const tabHref = $(this).attr('href');
    
    // 添加时间戳避免浏览器缓存
    const freshHref = `${tabHref}?t=${new Date().getTime()}`;
    // 更新Tab的href属性
    $("#tabs ul li a").eq(tabIndex).attr("href", freshHref);
    
    // 临时关闭缓存
    $("#tabs").tabs("option", "cache", false);
    // 重新激活Tab触发加载和初始化
    $("#tabs").tabs("option", "active", tabIndex);
    // 恢复缓存设置
    $("#tabs").tabs("option", "cache", true);
});

可选优化:调整初始化事件

将初始化逻辑从load事件移到activate事件,确保每次Tab激活时都能执行初始化(包括重新加载后):

$('#tabs').tabs({
    cache: true,
    activate: function(event, ui) {
        const active = $('#tabs').tabs("option", "active");
        if (active == 2){
            $('#amstart').addClass('selectedRadio');
            $( "input[type=submit]" ).button();
            theCalendar();
        }           
    }
});

内容的提问来源于stack exchange,提问作者Sergio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 15:41:47