今天接到任務,需求很簡單將現有網站的菜單做成無重新整理的,因為之前是使用frameset網頁架構是標準的top,left,main。
left頁面中菜單是用<a>標籤做的,這樣點擊菜單是會看到明顯的頁面重新整理,現在需要不出現進度載入,我第一個想到的是使用ajax
於是代碼 改成了
function Display(url) { $.get(url, function (data) { $(window.top.frames["main"].document.getElementById('Display')).html(data); }); }
本想這這樣就結束了,但問題隨之而來,這樣請求載入後a頁面可以載入b頁面資料,但是會將整個b頁面載入過來(js不載入,但是執行了)不影響效果忽略。
運行頁面問題又來了,頁面做到無刷,但是在b頁面寫的js方法都沒用了(並不是不執行而參數問題),因為之前使用js GetUrlParam('')方法擷取url傳值過來參數
具體方法如下
function GetUrlParam(paramName) { var url = document.URL; //URL參數,你也可以用document.URL來擷取,方法太多了 var oRegex = new RegExp('[\?&]' + paramName + '=([^&]+)', 'i'); //var oMatch = oRegex.exec( window.top.location.search ) ; //擷取當前視窗的URL var oMatch = oRegex.exec(url); if (oMatch && oMatch.length > 1) return oMatch[1]; //傳回值 else return '';}
現在這個方法擷取不到url參數了,因為我都是ajax請求的。考慮使用後台存參數值,經測試方法複雜了,每次都需要去記錄。嘗試失敗!
下一個問題,在b頁面中如果使用$("#id").val()類似的方法,現在這些值都是undefined。原因大致明白了,但是說不清楚。
嘗試方法將b頁面方法寫到a中(其實這樣肯定是可以的)成功!不錯這個方法操作性不強,因為b頁面只是請求中的一個而已,總部能把所有菜單上的頁面對應的js方法都寫到a中吧。
繼續嘗試ing...
經過一番嘗試,和資料查詢,對於id問題我得到瞭解決,具體辦法是加入frameset對應 例:
$(window.top.frames["main"].document.getElementById('id')).text();
這樣擷取值就可以了。
不過另一個問題,擷取ajax傳遞url參數,繼續探索ing...
上個問題還沒解決又出新問題了T.T
我在b的button onclick中有個del()方法,del方法寫在本頁面中
通過ajax請求後,del()未定義了。繼續探索中...
Demo下載