使用jQuery的load方法设计动态加载及解决被加载页面js失效问题


Posted in Javascript onMarch 01, 2017

一、问题分析

对于后台系统,相比大家都有所印象,知道其中的布局结构,如图:

使用jQuery的load方法设计动态加载及解决被加载页面js失效问题

在这种布局中我们需要将header,sidebar,footer分开,而且对于中间部分的content内容需要动态变化,即根据不同菜单定位到不同页面,而整体布局不会变化

这种布局结构对于单纯的HTML不具备这种嵌入各部分内容的能力,所以就需要我们自己来寻找或者解决这种问题,由于jquery的兼容性和使用广度比较不错,这里

使用jquery的load方法来处理这种页面布局框架。

二、load方法详解

1.定义

$(selector).load(URL,data,callback);

必需的 URL 参数规定您希望加载的 URL。

可选的 data 参数规定与请求一同发送的查询字符串键/值对集合。

可选的 callback 参数是 load() 方法完成后所执行的函数名称。

 2.示例

也可以把 jQuery 选择器添加到 URL 参数。

  下面的例子把 "demo_test.txt" 文件中 id="p1" 的元素的内容,加载到指定的 <div> 元素中:

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

可选的 callback 参数规定当 load() 方法完成后所要允许的回调函数。回调函数可以设置不同的

$("#div1").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代码加载到布局页面的<div id="content"></div>中这样每次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" rel="external nofollow" >
 </head>
 <body class="hold-transition skin-blue-light sidebar-mini" onload="onload();">
  <div class="wrapper">
   <div id="header">
   </div>
   <!-- Left side column. contains the logo and sidebar -->
   <div id="sidebar">
   </div>
   <!-- Content Wrapper. Contains page content -->
   <div id="content" class="content-wrapper clearfix">
    <!-- Content Header (Page header) -->
   </div>
   <!-- /.content-wrapper -->
   <div id="footer">
   </div>
   <!-- Add the sidebar's background. This div must be placed
  immediately after the control sidebar -->
   <div class="control-sidebar-bg"></div>
  </div>
  <!-- ./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" rel="external nofollow" rel="external nofollow" >测试</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>

被加载页面:

<div id="content">
 <div>测试二</div>
 <span onclick="javascript:load(this);" href="/backstage/website/test.html" rel="external nofollow" rel="external nofollow" >测试</span>
 <a href="javascript:test();" rel="external nofollow" >测试</a>
 <script>
  function test(){
   alert("测试二页面");
  }
 </script>
 <script>
  function test2(){
   alert("ceshi");
  }
 </script>
</div>

效果截图:

使用jQuery的load方法设计动态加载及解决被加载页面js失效问题

以上所述是小编给大家介绍的使用jQuery的load方法设计动态加载及解决被加载页面js失效问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
今天是星期几的4种JS代码写法
Sep 17 Javascript
JavaScript获取Url里的参数
Dec 18 Javascript
在AngularJS中使用jQuery的zTree插件的方法
Apr 21 Javascript
手机端转换rem适应
Apr 01 Javascript
vue + webpack如何绕过QQ音乐接口对host的验证详解
Jul 01 Javascript
微信小程序获取用户信息及手机号(后端TP5.0)
Sep 12 Javascript
基于Vue+ElementUI的省市区地址选择通用组件
Nov 20 Javascript
Vue-axios-post数据后端接不到问题解决
Jan 09 Javascript
JavaScript oncopy事件用法实例解析
May 13 Javascript
JS实现时间校验的代码
May 25 Javascript
微信小程序实现上传照片代码实例解析
Aug 04 Javascript
vue实现验证用户名是否可用
Jan 20 Vue.js
分分钟玩转Vue.js组件(二)
Mar 01 #Javascript
js实现带三角符的手风琴效果
Mar 01 #Javascript
JavaScript拖动层Div代码
Mar 01 #Javascript
vue组件间通信解析
Mar 01 #Javascript
性能优化之代码优化页面加载速度
Mar 01 #Javascript
详解AngularJS通过ocLazyLoad实现动态(懒)加载模块和依赖
Mar 01 #Javascript
Javascript仿京东放大镜的效果
Mar 01 #Javascript
You might like
PHP个人网站架设连环讲(四)
2006/10/09 PHP
PHP使用ffmpeg给视频增加字幕显示的方法
2015/03/12 PHP
如何把php5.3版本升级到php5.4或者php5.5
2015/07/31 PHP
thinkphp ajaxfileupload实现异步上传图片的示例
2017/08/28 PHP
jquery 无限级联菜单案例分享
2013/03/26 Javascript
javascript删除数组元素并且数组长度减小的简单实例
2014/02/14 Javascript
ExtJS4如何给同一个formpanel不同的url
2014/05/02 Javascript
第二章之Bootstrap 页面排版样式
2016/04/25 Javascript
jQuery判断checkbox选中状态
2016/05/12 Javascript
JQuery点击行tr实现checkBox选中的简单实例
2016/05/26 Javascript
axios使用拦截器统一处理所有的http请求的方法
2018/11/02 Javascript
es6数据变更同步到视图层的方法
2019/03/04 Javascript
在Vue项目中使用jsencrypt.js对数据进行加密传输的方法
2019/04/17 Javascript
JS回调函数原理与用法详解【附PHP回调函数】
2019/07/20 Javascript
JS中的算法与数据结构之二叉查找树(Binary Sort Tree)实例详解
2019/08/16 Javascript
在vue中实现清除echarts上次保留的数据(亲测有效)
2020/09/09 Javascript
python 调用win32pai 操作cmd的方法
2017/05/28 Python
python3+PyQt5实现文档打印功能
2018/04/24 Python
Python基础之字符串操作常用函数集合
2020/02/09 Python
python 实现线程之间的通信示例
2020/02/14 Python
深入理解Tensorflow中的masking和padding
2020/02/24 Python
Python 如何实现数据库表结构同步
2020/09/29 Python
python实现代码审查自动回复消息
2021/02/01 Python
Hunkemöller瑞士网上商店:欧洲最大的内衣品牌之一
2018/12/03 全球购物
农业大学毕业生的个人自我评价
2013/10/11 职场文书
会计应届生的自荐信
2013/12/13 职场文书
内业资料员岗位职责
2014/01/04 职场文书
安全环保标语
2014/06/09 职场文书
缓刑人员思想汇报500字
2014/09/12 职场文书
事业单位人员的自我评价范文
2014/09/21 职场文书
个人融资协议书范本两则
2014/10/15 职场文书
故宫的导游词
2015/01/31 职场文书
小学教师节活动总结
2015/03/20 职场文书
背起爸爸上学观后感
2015/06/08 职场文书
Python基础之数据结构详解
2021/04/28 Python
CSS 鼠标选中文字后改变背景色的实现代码
2023/05/21 HTML / CSS