【问题标题】:javascript history.back losses the search resultjavascript history.back 丢失搜索结果
【发布时间】:2012-11-24 20:39:16
【问题描述】:

A页:

$(document).ready(function () {
    bindData();
});

function bindData() {
    $('#searchbtn').bind('click', function () { SearchResult(); });
}
function SearchResult() {
 ajax call...
}

页面 A HTML:

<input type="button" id="searchbtn" />

页面B详细信息--->从页面A搜索列表中选择特定搜索结果后出现此页面

    <a href="javascript:history.back();">Back</a><br />

现在,当我返回页面 A 时,我可以看到我的搜索条件已被选中,但结果 Div 消失了。我想要做的是我希望在页面返回时保留搜索列表。 我想我可以在这里做的是如何在页面返回时再次调用 searchbtn click 事件,以便列表再次出现。谁能告诉我如何仅在页面从页面 B 返回时触发 searchbtn 点击事件。或者指出我这样做的正确方式.. 谢谢

【问题讨论】:

    标签: javascript ajax html browser-history


    【解决方案1】:

    浏览器后退按钮长期以来一直是 AJAX 的问题。那里有脚本、解决方法和技术(取决于您要使用的框架)。

    由于您似乎在使用 jQuery(基于您发布的 JavaScript 语法),这里有一个指向另一个 Stackoverflow post regarding back button jQuery plugins 的链接。

    【讨论】:

      【解决方案2】:

      history.back() 会将您返回到上次访问的 URL,这意味着在用户访问期间进行的任何 ajax 调用都不会自动重复。您的浏览器可能会自动恢复您的表单选择,但 SearchResults() 函数仅由 click 事件调用,不是选择事件。

      您可以使用 sammy.js 之类的框架将 URL 绑定到 ajax 状态。这样,history.back() 会将您带到与 SearchResults() 关联的 URL。

      【讨论】:

        【解决方案3】:
            function bindData() {
            var chkinput1 = $("input:checkbox[name=x]:checked").length;
            var chkinput2 = $("input:checkbox[name=y]:checked").length;
        
            if (chkinput1 > 0 && chkinput2 > 0) {
               SearchResult();
             }
            $('#searchbtn').bind('click', function () { SearchResult(); });
            }
        

        我知道这是实现此结果的最糟糕的方法,但我认为与其使用任何其他插件来增加复杂性,我们现在将采用此方法。如果其他人正在寻找相同的问题,让我再次告诉您,这不是最佳实践,因为在返回历史记录时,我们将再次调用搜索结果,具体取决于复选框的缓存输入选择并再次生成整个 ajax 调用显示列表。在第一个请求中,我正在缓存列表并设置滑动到期,因此它不需要任何时间来恢复,所以每个人都过得愉快。

        【讨论】:

          猜你喜欢
          • 2021-06-26
          • 2020-12-26
          • 2016-11-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-11-12
          • 2017-05-28
          相关资源
          最近更新 更多