1. 程式人生 > >Jquery load 方法下前進、後退、重新整理問題的解決

Jquery load 方法下前進、後退、重新整理問題的解決

做一個後臺管理系統的時候,用到了admin-lte框架。不過其實大部分後臺管理系統都是這樣的設計,即,左邊是可以縮排的選單欄,右邊是內容,使用者點選選單的時候,選單欄和上邊的使用者資訊欄並不會重新載入,也就是不會跳轉到新的頁面,緊緊是更新了右邊的內容模組。

跟大多數人一樣,我使用的是jqueryload()方法,如下所示:

<li><a href="javascript:loadMenu('<%=request.getContextPath()%>/commons/redirect.do?path=management/user_list')">使用者列表</a
>
</li> <li><a href="javascript:loadMenu('<%=request.getContextPath()%>/commons/redirect.do?path=management/department_list')"></i>歸屬部門</a></li> ... <script> function loadMenu(path, parameter) { $('#main-content').load(path, parameter); } $(function
() {
var defaultPath = '<%=request.getContextPath()%>/commons/redirect.do?path=task/task_list'; loadMenu(defaultPath); });
</script>

上述的程式碼中,定義了一個loadMenu方法,按鈕點選的時候呼叫此方法,將新的內容頁面載入到main-content這個<div>塊中,實現了選單欄不重新整理、內容變化的功能。當第一次進入此頁面時,自動呼叫loadMenu方法,載入預設頁面。

然而這種實現方式有一種缺陷:當用戶點選前進按鈕、後退按鈕、重新整理按鈕時,由於實際上使用者只訪問了一個頁面,其他的“功能頁面”都是更新此頁面中的main-content

的內容,所以,前進、後退、重新整理時,可能會退出當前網站、頁面,這並不是我們在訪問普通網頁時期望的前進、後退、重新整理行為。

下面提出一種解決方案,實測有效:

...
<script>

    $(function () {
        $.refresh()
    })

    function loadMenu(path, parameter) {
        $.pushState(path, parameter)
        $.loadPage(path, parameter)
    }

    $.extend(
        {
            loadPage: function (url, data) {
                console.log('loading url: ' + url)
                $('#main-content').load(url, data);
            },
            pushState: function (url, data) {
                console.log("pushing state: " + url)
                history.pushState({urlStr: url, data: data}, "頁面標題", "?_url=" + url);
            },

            popState: function () {
                window.addEventListener("popstate", function () {
                    var currentState = history.state
                    if (currentState != null) {
                        var url = ".." + currentState.urlStr
                        console.log('poping state: ' + url)
                        $.loadPage(url, currentState.data)
                    }
                })
            },

            refresh: function () {
                var currentState = history.state;
                if (currentState != null) {
                    var loadUrl = ".." + currentState.urlStr
                    console.log('refreshing state: ' + loadUrl)
                    $.loadPage(loadUrl, currentState.date)
                }else{
                    var defaultPath = '<%=request.getContextPath()%>/commons/redirect.do?path=task/task_list';
                    loadMenu(defaultPath)
                }
            }
        }
    )

    $.popState()
</script>

如上述程式碼,我們拓展了popState/refresh方法,當用戶點選前進(後退)、重新整理按鈕時會分別觸發這兩個方法, 然後在方法中獲取到使用者(這裡指我…)期望的路徑,通過load方法將這些內容載入。

那麼這些“記錄”是如何儲存和獲取的呢?當用戶點選選單(按鈕),呼叫loadMenu方法時,我們先呼叫pushState方法,將他要訪問的頁面新增到歷史記錄history.pushState,然後在前進、後退、重新整理時獲取到對應的歷史記錄history.state,通過load方法載入這些內容飢渴。並且引數也可以通過對應data欄位儲存和獲取。

實測有效,不過還需要考慮,載入頁面後選單欄的active問題。可以通過傳遞的引數來判斷,修改className,這裡不贅述。

相關推薦

Jquery load 方法前進後退重新整理問題的解決

做一個後臺管理系統的時候,用到了admin-lte框架。不過其實大部分後臺管理系統都是這樣的設計,即,左邊是可以縮排的選單欄,右邊是內容,使用者點選選單的時候,選單欄和上邊的使用者資訊欄並不會重新載入,也就是不會跳轉到新的頁面,緊緊是更新了右邊的內容模組。

JS監聽微信支付寶等移動app及瀏覽器的返回後退上一頁按鈕的事件方法

on() 移動app 自己的 win 功能 監聽 ner tor event $(function(){ pushHistory(); window.addEventListener("popstate", function(e) { alert("我監聽到

Android WebView的前進後退重新整理

mWebView.goBack();   //後退  mWebView.goForward();//前進 mWebView.reload();  //重新整理   //點選後退按鈕,讓WebView後退一頁(也可以覆寫Activity的

Python3 Selenium WebDriver網頁的前進後退重新整理最大化獲取視窗位置設定視窗大小獲取頁面title獲取網頁原始碼獲取Url等基本操作

Python3 Selenium WebDriver網頁的前進、後退、重新整理、最大化、獲取視窗位置、設定視窗大小、獲取頁面title、獲取網頁原始碼、獲取Url等基本操作 通過selenium webdriver操作網頁前進、後退、重新整理、最大化、獲取視窗位置、設定視窗大小、獲取頁面title、獲取網頁

很多人都不知道的監聽微信支付寶等移動app及瀏覽器的返回後退上一頁按鈕的事件方法

在實際的應用中,我們常常需要實現在移動app和瀏覽器中點選返回、後退、上一頁等按鈕實現自己的關閉頁面、調整到指定頁面或執行一些其它操作的 需求,那在程式碼中怎樣監聽當點選微信、支付寶、百度糯米、百度錢包等app的返回按鈕或者瀏覽器的上一頁或後退按鈕的事件呢。 我相信很多朋

javascript 前進後退重新整理

Main.html頁面 <frameset rows="127,*,11" frameborder="no" border="0" framespacing="0" > <frame src="top.html" name="topFrame" scr

Android WebView載入網頁,實現前進後退重新整理超連結

你也可以檢視我的其他同類文章,也會讓你有一定的收貨! 先在要顯示網頁的佈局檔案中宣告WebView 在Activity中例項化WebView 呼叫WebView的loadUrl( )方法,設定WevView要顯示的網頁 為了讓WebView能夠響應超連結

優雅的實現Activiti動態調整流程(自由跳轉前進後退分裂前加簽後加籤等),含範例程式碼!

最近對Activiti做了一些深入的研究,對Activiti的流程機制有了些理解,對動態調整流程也有了一些實踐方法。現在好好總結一下,一來是對這段時間自己辛苦探索的一個記錄,二來也是為後來者指指路~~~如下內容準備採用QA的方式寫,很多問題都是當初自己極疑惑的問題,希望能為大

控制使用jquery load()方法載入新頁面中的元素

三個參數 解決 獲取 參數 頁面 紮實 第一個 之前 簡單 最近在項目中用到jquery的load()方法來加載頁面,首先簡單說一下load()方法。 load(url,data,callback);該方法接收三個參數,第一個是載入的頁面地址,第二個是要傳到服務器的參數,第

監聽瀏覽器返回鍵後退上一頁事件(popstate)操作返回鍵

som cnblogs back eba spa 查詢 sta ces 關閉   在WebApp或瀏覽器中,會有點擊返回、後退、上一頁等按鈕實現自己的關閉頁面、調整到指定頁面、確認離開頁面或執行一些其它操作的需求。可以使用 popstate 事件進行監聽返回、後退、上一頁操

jquery load()方法實現區域性重新整理,多張網頁切換(li標籤實現上下頁的切換)

---學習借鑑中--- (1)父頁面插入的位置 <div  id="content" > //id為要重新整理顯示的子頁面的內容 </div> (2)父頁面顯示標籤切換不同html頁面 <ul class="userMenu"> <li

移動app手機物理鍵返回後退上一頁面並重新載入頁面資料

專案中遇到一個問題,做個筆記。就是在微信網頁上面本來是有返回按鈕的,但是大多數人都為了方便,會使用安卓手機自帶的物理返回鍵,這個返回鍵按下後,上一頁內容獲取最新資料。如圖:需求:常見問題,點選一個問題後

jQuery:load()方法

jquery的load()方法可以載入頁面或資料到指定的元素,通常用於聯動的頁面效果,下面是示例: 一,簡單的載入頁面 <select name="bigSortId" id="bigSortId" onChange="getSmallSort()"> &

Jquery load()方法 實現公用頭部 尾部

//這是header.html裡的程式碼,想作為頭部引進來 <div id="loginBox"> <span></span> <div> <div> &l

jQuery load() 方法

原文連結:http://www.runoob.com/jquery/ajax-load.html 定義和用法 load() 方法從伺服器載入資料,並把返回的資料放置到指定的元素中。 注意:還存在一個名為 load 的 jQuery 事件方法。呼叫哪個,取決

jQuery-Load方法

alt url inf cti 使用 com 獲取數據 easyu jquer 1、load() 介紹:load() 方法通過 AJAX 請求從服務器加載數據,並把返回的數據放置到指定的元素中 該方法是最簡單的從服務器獲取數據的方法。它幾乎與 $.get(url, da

jQuery load() 方法實現載入遠端資料

jQuery load() 方法是簡單但強大的 AJAX 方法。load() 方法從伺服器載入資料,並把返回的資料放入被選元

JQuery的父兄弟節點查找方法

all bsp 集合 val 直接 對象 fin 部分 篩選 jQuery.parent(expr) //找父元素 jQuery.parents(expr) //找到所有祖先元素,不限於父元素 jQuery.children(expr)

Selenium基礎之--01(將瀏覽器最大化,設置瀏覽器固定寬高,操控瀏覽器前進後退)

TP IV sleep .get class 需求 靈活 屏幕 web自動化 1,將瀏覽器最大化 我們知道調用啟動的瀏覽器不是全屏的,這樣不會影響腳本的執行,但是有時候會影響我們“觀看”腳本的執行。 coding=utf-8 from selenium import web

JQuery的父兄弟節點查詢方法

jQuery.parent(expr)           //找父元素 jQuery.parents(expr)          //找到所有祖先元素,不限於父元素 jQuery.chil