【问题标题】:Reload tab on button click单击按钮时重新加载选项卡
【发布时间】:2013-10-29 09:32:40
【问题描述】:

我有一个包含选项卡和子选项卡的表单,如下所示:

<div id="tabs">
        <ul>
            <li><a href="#tab_details">Details</a></li>
            <li><a href="#tab_dia">DIA</a></li>
        </ul>
        <div id="tab_details">
            <code>
        </div>
        <div id="tab_dia">
            <div id="dia_sub_tabs">
                <ul>
                    <li><a href="#DIA_details">DIA Details</a></li>
                    <li><a href="#IA_info">IA Information</a></li>
                </ul>
                <div id="DIA_details">
                    <code>
                </div>
                <div id="IA_info">
                    <code>
                </div>
            </div>
        </div>  
    </div>

我正在使用 javascript 在表单中单击按钮时分别保存每个选项卡的数据:

<span><a href="javascript:void(0)" id="save_changes_id" class="button_links">Save Changes</a></span>

JS代码如下:

$("#save_changes_id").click(function() {
    //  To retrieve the current TAB and assign it to a variable ...
    var curTab = $('.ui-tabs-active');      
    var curTabPanelId = curTab.find("a").attr("href");

    if(curTabPanelId == "#tab_dia"){
        var curTab = $('#dia_sub_tabs .ui-tabs-active');
        var curTabPanelId = curTab.find("a").attr("href");
    }
    responseData = doAjaxCall($(curTabPanelId + " form"));

        if(responseData == 1) 
            showMessage('status_msg', 'Project details updated successfully', 'green');
        else
            showMessage('status_msg', 'Error: Please check all the fields', 'red');

});

我想要的是每次点击保存按钮时重新加载页面,并显示我在重新加载后保存的活动选项卡。

我尝试提供 window.location.reload() ,但显示的是重新加载后的第一个选项卡,而不是之前处于活动状态的选项卡。

请为此提出解决方案。提前致谢。

【问题讨论】:

  • 如果你想在客户端做...使用 localStorage...你想知道怎么做?
  • @anand4tech 你能举个例子吗,因为我对此比较陌生,从未使用过localStorage
  • @Elvin Varghese 更好的是 sessionStorage。

标签: javascript jquery tabs


【解决方案1】:

试试这个Example

sessionStorage 会在浏览器关闭时自动清除。它存储一个会话的数据。

阅读此文档:sessionStorage

【讨论】:

    【解决方案2】:

    试试这个逻辑,

    点击保存按钮后...

    $("#save_changes_id").click(function() {
      // set the active tab id in localStorage against key 'ACTIVE_TAB_ID'
    
      window.localStorage.setItem('ACTIVE_TAB_ID',yorActiveTabId);//yorActiveTabId is js  varible which contains active tab id.
    
    });
    

    现在重新加载页面后,获取活动标签的 ID,例如...

    var activeTabId=window.localStorage.getItem('ACTIVE_TAB_ID');
    

    现在使用 js,您可以使用“activeTabId”添加类以激活选项卡

    您可以使用 sessionStorage 代替 localStorage,但关闭浏览器后您的数据会丢失,但如果您使用 localStorage,则数据不会丢失。

    【讨论】:

    • 非常感谢您抽出宝贵的时间....目前正在努力解决这个问题,如果可能的话,您能否举个例子让标签处于活动状态,因为我遇到了一些问题。
    • 让我们说'commonClass'是所有选项卡中都存在的一个类,'activeClass'是包含在活动选项卡中的类,那么你的js脚本就像---$('.commonClass') .removeClass('activeClass'); $('#'+activeTabId).addClass('activeClass');----我想这会有所帮助。
    • 你的每个标签都应该有 id 属性
    • 不是必须的,你可以将它声明为局部变量,这样它就应该在你将使用这个变量的范围内。
    • 我不知道为什么,但是重新加载后它没有使标签处于活动状态....仍然转到第一个标签。
    【解决方案3】:

    如果您重新加载页面,那么您将无法拥有 js 状态,因为它也会被重新加载。在不就 ui 行为联系服务器的情况下执行此操作的一种方法是将活动选项卡作为参数传递给锚点/window.location.hash 或 url 查询参数。 然后从您的 js 中,您可以从 window.location 解析 url 并相应地调整您的 ui。

    其他方法可能是使用 cookie、html5 网络存储(本地存储、会话存储)。但是,对于您的情况,我认为最精简和用户友好的(例如可收藏的 url)是使用 url。

        $(document).ready(function () {
    
        $(this).parent('li').addClass('ui-tabs-active');
        var activeTab = window.location.hash;
        $('a[href="' + activeTab + '"]').parent('li').addClass('ui-tabs-active');
    
    
        $('a').click(function () {
            $('li.ui-tabs-active').removeClass('ui-tabs-active');
            $(this).parent('li').addClass('ui-tabs-active');
        });
    
        $("#save_changes_id").click(function () {
    
            var curTab = $('.ui-tabs-active');
            var curTabPanelId = curTab.find("a").attr("href");
    
            window.location.href = window.location.href.split("#")[0] + curTabPanelId;
            window.location.reload();
    
            /*
        if(curTabPanelId == "#tab_dia"){
            var curTab = $('#dia_sub_tabs .ui-tabs-active');
            var curTabPanelId = curTab.find("a").attr("href");
        }
        responseData = doAjaxCall($(curTabPanelId + " form"));
    
            if(responseData == 1) 
                showMessage('status_msg', 'Project details updated successfully', 'green');
            else
                showMessage('status_msg', 'Error: Please check all the fields', 'red');*/
    
        });
    });
    

    看看小提琴,为了清楚起见,与 ajax 相关的代码已被注释掉。活动类是在单击时添加的,您可能还有一些其他过程,只是添加了这个以演示选择/选项卡的选择以及重新加载后如何处理它。 http://jsfiddle.net/ChTGc/4/show/

    【讨论】:

    • 你能举个小例子吗,因为我对 JS 比较陌生。
    • 它在重新加载后没有显示正确的主选项卡(仍然转到第一个选项卡),即使它保留了在重新加载后选择该选项卡时在子选项卡中处于活动状态的选项卡。
    • @ElvinVarghese 请仔细看看小提琴是 jsfiddle.net/ChTGc/4/show ,您需要单击链接/选项卡,然后选择保存更改。您可能在编辑答案之前进行了检查,为了简单起见,它被硬编码。要查看代码,请从小提琴 url 中删除 show 部分。
    • @ElvinVarghese 在小提琴上它工作正常,你的代码有什么不同?请发帖,我可以给你一些反馈?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-28
    • 1970-01-01
    相关资源
    最近更新 更多