首頁 >web前端 >js教程 >使用jquery的load方法設計動態加載,並解決被加載頁面JavaScript失效問題

使用jquery的load方法設計動態加載,並解決被加載頁面JavaScript失效問題

巴扎黑
巴扎黑原創
2017-06-30 14:26:581908瀏覽

一、問題分析

對於後台系統,相較於大家都有所印象,知道其中的佈局結構,如圖:

##在在這個佈局中我們需要將header,sidebar,footer分開,而且對於中間部分的content內容需要動態變化,即根據不同選單定位到不同頁面,而整體佈局不會變化

這種佈局結構對於單純的HTML不具備這種嵌入各部分內容的能力,所以就需要我們自己來尋找或解決這種問題,由於jquery的兼容性和使用廣度比較不錯,這裡

使用jquery的load方法來處理這種

頁面佈局框架。

二、load方法詳解

1.定义
  $().load(,,);
  必需的 

URL 參數規定您希望載入的 URL。

  可選的 

data 參數規定與請求一同發送的查詢字串鍵/值對集合。

  可選的 

callback 參數是 load() 方法完成後所執行的函數名稱。

 2.範例

  • 也可以把 jQuery 選擇器加入到 URL 參數。

    下面的範例把"demo_test.txt" 檔案中id="p1" 的元素的內容,載入到指定的

元素中:

    $("#p1").load("demo_test.txt #p1");


$("#p1").load("demo_test.txt",function(responseTxt,statusTxt,xhr){    if(statusTxt=="success")
      alert("外部内容加载成功!");    if(statusTxt=="error")
      alert("Error: "+xhr.status+": "+xhr.statusText);
  });
三、佈局框架load的使用

1.問題

網路上很多人在使用load方法載入動態頁面的時候遇到一個普遍的問題,就是在被載入頁面中的

JavaScript程式碼失效,這是因為load載入的外部檔案會把Script部分刪除掉,所以被載入頁面中呼叫該頁面的JavaScript的時候就會出現xxxfunction未定義。

2.解決

  • 對於header,sidebar,footer這種只包含靜態HTML程式碼的部分直接使用load載入

  • 對應中間content變化的內容,通常會包含對應的JavaScript程式碼,使用自訂的load方法(如下程式碼),在使用jquery.load()方法載入對應的內容的同時,使用load的回呼方法處理JavaScript的加載,將被加載頁面的JavaScript程式碼加載到佈局頁面的

    中這樣每次load()的時候content的內容都會被覆蓋,所以也不必擔心重複加載的問題。這樣就完美解決被載入頁面js失效的問題。具體程式碼如下所示:

四、程式碼範例

版面:


<!DOCTYPE html>
<html>

    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <title></title>
        <!-- Tell the browser to be responsive to screen width -->
        <meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
        <!-- Bootstrap 3.3.6 -->
        <link rel="stylesheet" href="../resources/bootstrap/css/bootstrap.min.css">       
    </head>

    <body class="hold-transition skin-blue-light sidebar-mini" onload="onload();">
        <p class="wrapper">
            
            <p id="header">
            
            </p>
            
            <!-- Left side column. contains the logo and sidebar -->
            <p id="sidebar">
            
            </p>

            <!-- Content Wrapper. Contains page content -->
            <p id="content" class="content-wrapper clearfix">
                <!-- Content Header (Page header) -->
                
                
            </p>
            <!-- /.content-wrapper -->

            <p id="footer">
            
            </p>
            
            <!-- Add the sidebar&#39;s background. This p must be placed
       immediately after the control sidebar -->
            <p class="control-sidebar-bg"></p>

        </p>
        <!-- ./wrapper -->

        <!-- jQuery 2.2.3 -->
        <script src="../resources/plugins/jQuery/jquery-2.2.3.min.js"></script>
        <!-- Bootstrap 3.3.6 -->
        <script src="../resources/bootstrap/js/bootstrap.min.js"></script>
        
        <!--左侧菜单-->
        <script src="../resources/dist/js/common/global.js"></script>
        <script src="../resources/dist/js/menu/menuTemplate.js"></script>
        <script src="../resources/dist/js/menu/menu.js"></script>
    </body>
<script> //加载页面布局的header,sidebar,footer的内容
 $("#header").load("inc/header.html");
 $("#sidebar").load("inc/sidebar.html");
 $("#footer").load("inc/footer.html"); 
 /*
 *加载变换内容,主要url参数为dom对象,并且该dom中的url放在href中,
 *调用方式如:<span onclick="javascript:load(this);" href="/backstage/website/test.html">测试</span>
 *注意:1.该dom对象最好不要用a标签,因为点击a标签会进入href指定的页面
 *      2.要加载的内容要用 id="content" 标注,因为load中指明了加载页面中指定的id为content下的内容
 *    3.对应页面的JavaScript写在content下 */
 function load(url, data){     //alert($(url).attr("href"));
     $.ajaxSetup({cache: false });
     $("#content").load($(url).attr("href")+ " #content ", data, function(result){         //alert(result);
         //将被加载页的JavaScript加载到本页执行
         $result = $(result); 
         $result.find("script").appendTo('#content');
     });

 }</script>
</html>
 

被載入頁面:


<p id="content">
    <p>测试二</p>
    <span onclick="javascript:load(this);" href="/backstage/website/test.html">测试</span>
    <a href="javascript:test();">测试</a>
    <script>        function test(){
            alert("测试二页面");
        }    </script>
    <script>        function test2(){
            alert("ceshi");
        }    </script>
</p>
效果截圖:

以上是使用jquery的load方法設計動態加載,並解決被加載頁面JavaScript失效問題的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn