jquery 单击li防止重复加载的实现代码


Posted in Javascript onDecember 24, 2010

因为加载内容比较慢,所以用户可能在li上不经意点击了两次,那么就会请求两次,这是我们不想看到的。
今天在javascript-jquery群上一筒子发了两个demo给我,他的方法是先将单击的li节点拷贝出来,在加载完后
在重新插回去,显然不太适合我做的功能。
正一筹莫展,想了一下,何不在li点击时加入loading图片(在ajax加载前),判断li节点上是否存在了img元素,
没有则加载ajax内容,否则不处理。
测试了可以通过,\(^o^)/。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>jquery ajax加载绑定事件</title> 
<style> 
*{ margin:0px; padding:0px;} 
body{ font-size:12px; font-family:Verdana, Arial, Helvetica, sans-serif;} 
#container{ position:relative; overflow:hidden;} 
#header{ height:100px; line-height:100px; background:#dedede; padding-left:20px; position:absolute; left:0px; top:0px; position:fixed!important; width:100%; margin-bottom:20px;} 
#header h1{ font-size:120%; color:#fff;} 
#header h1 span{ font-size:75%} 
#siderbar{ width:240px; margin-left:10px;border:1px solid #ddd; position:absolute; left:0px; top:120px; position:fixed!important; z-index:9999;} 
#siderbar_box{ padding:10px;overflow:auto} 
#siderbar h4{ background:#eee; color:#666; padding:5px 10px;} 
#siderbar_box ul{ list-style:none; margin-left:10px;} 
#content{ padding:120px 0px 0px 260px; overflow:auto;_padding:120px 0px 0px 280px;} 
#content ul{list-style:none;} 
#content ul li{ border:1px solid #ddd; cursor:pointer; display:block} 
#content ul li span{ display:block; padding:5px;} 
#content ul li table{ margin:5px auto; padding:0px; border-collapse:collapse; border:1px solid #999; width:98%;} 
#content ul li table td{/* padding:2px 5px;*/ border:1px solid #999;} 
#content_footer{ text-align:center;} 
.focus{padding:2px 5px; boder:1px solid #aaa; background:#fafafa;} 
.highlight{color:#fff; background:#0099FF} 
</style> 
<script src="jquery-1.3.2.min.js"></script> 
<script> 
$(function(){ 
setHeight("#siderbar",130); // 设置侧边栏的高度 
$(window).resize(function(){setHeight("#siderbar",130)}); //窗口变化时重新设置侧边栏高度 
$.get("sider.html",function(data){ 
$('#siderbar_box').append(data); 
}); 
/*设置ID的高度*/ 
function setHeight(id,h){ 
var windowHeight=$(window).height(); 
$(id).css({"height":(windowHeight-h)+"px"}); 
} 
// 绑定加载后的li的查看 
$("#siderbar_box ul li a").live("click",function(){ 
var $current=$(this); 
var $currentli=$(this).parent(); 
if($currentli.children("ul").attr("id")==undefined) //第一次需ajax加载 
{ 
$currentli.siblings().children("ul").slideUp('fast'); 
$currentli.siblings().children("a").removeClass("focus"); 
$.get("chapter.html",function(data){ 
$current.addClass("focus").parent().append(data); 
showChapter(); //在content去显示主要内容 
}); }else{ 
$currentli.siblings().children("ul").slideUp('fast'); 
$currentli.siblings().children("a").removeClass("focus"); 
if($currentli.children("ul").is(":visible")) //处于展开状态 
{ 
$current.removeClass("focus").parent().children("ul").slideUp('fast'); 
}else{ 
$current.addClass("focus").parent().children("ul").slideDown('slow'); 
showChapter(); 
} 
} 
}); 
//content显示列表标题 
function showChapter(){ 
$.get("chapter.html",function(data){ 
$("#content").html(data); 
$("#content ul li").live("click",function(){ //绑定加载后的标题单击事件 
$current=$(this); 
if($current.children("table").attr("id")==undefined) //单击标题,第一次ajax加载 
{ 
if($current.children("span").find("img").size()<1) //只加载一次内容,防止多次请求加载 
{ 
$current.children("span").append("<img src='loading.gif' border='none'/>"); //加载图片 
$.get("table.html",function(data){ 
$current.append(data).children("span").addClass("highlight").find("img").remove(); //加载完成移除加载图片 
}); 
} 
}else{ 
if($current.children("table").is(":visible")) 
{ 
$current.children("span").removeClass("highlight").next("table").hide(); 
}else{ 
$current.children("span").addClass("highlight").next("table").show(); 
} 
} 
}); 
}); 
} 
}); 
</script> 
</head> 
<body> 
<div id="container"> 
<div id="header"><h1>DEMO<span>©copyright by <a href="http://cnblogs.com/tomieric">Tomi-Eric's</a><span></h1></div> 
<div id="siderbar"> 
<h4>课程</h4> 
<div id="siderbar_box"> 
</div> 
</div> 
<div id="content"> 
<div id="content_footer"></div> 
</div> 
</div> 
</body> 
</html>

演示地址 http://demo.3water.com/js/jquery_li_click/demo.html
打包下载 http://xiazai.3water.com/201012/yuanma/jquery_li_click.rar
Javascript 相关文章推荐
JScript中的undefined和&quot;undefined&quot;的区别
Mar 08 Javascript
JavaScript Event学习第六章 事件的访问
Feb 07 Javascript
ExtJs GridPanel简单的增删改实现代码
Aug 26 Javascript
jquery写个checkbox——类似邮箱全选功能
Mar 19 Javascript
js钢琴按钮波浪式图片排列效果代码分享
Aug 26 Javascript
js实现跨域的几种方法汇总(图片ping、JSONP和CORS)
Oct 25 Javascript
JavaScript Ajax编程 应用篇
Jul 02 Javascript
AngularJS中ng-class用法实例分析
Jul 06 Javascript
详解vuex的简单使用
Mar 12 Javascript
详解vue项目中实现图片裁剪功能
Jun 07 Javascript
javascript遍历对象的五种方式实例代码
Oct 24 Javascript
如何通过简单的代码描述Angular父组件、子组件传值
Apr 07 Javascript
基于jquery的关于动态创建DOM元素的问题
Dec 24 #Javascript
在JavaScript中获取请求的URL参数
Dec 22 #Javascript
基于Jquery的表格隔行换色,移动换色,点击换色插件
Dec 22 #Javascript
jQuery Clone Bug解决代码
Dec 22 #Javascript
修改jquery.lazyload.js实现页面延迟载入
Dec 22 #Javascript
jquery插件 autoComboBox 下拉框
Dec 22 #Javascript
Jquery截取中文字符串的实现代码
Dec 22 #Javascript
You might like
PHP strncasecmp字符串比较的小技巧
2011/01/04 PHP
php数组函数array_walk用法示例
2016/05/26 PHP
php 读写json文件及修改json的方法
2018/03/07 PHP
PHP操作Postgresql封装类与应用完整实例
2018/04/24 PHP
PhpStorm本地断点调试的方法步骤
2018/05/21 PHP
Javascript Global对象
2009/08/13 Javascript
检测jQuery.js是否已加载的判断代码
2011/05/20 Javascript
javascript学习总结之js使用技巧
2015/09/02 Javascript
javascript实现查找数组中最大值方法汇总
2016/02/13 Javascript
JS实现图片平面旋转的方法
2016/03/01 Javascript
Node.js 应用跑得更快 10 个技巧
2016/04/03 Javascript
关于JS变量和作用域详解
2016/07/28 Javascript
学习vue.js中class与style绑定
2016/12/03 Javascript
Bootstrap源码学习笔记之bootstrap进度条
2016/12/24 Javascript
javascript 单例模式详解及简单实例
2017/02/14 Javascript
Angular2+国际化方案(ngx-translate)的示例代码
2017/08/23 Javascript
微信小程序中进行地图导航功能的实现方法
2018/06/29 Javascript
详解小程序之简单登录注册表单验证
2019/05/13 Javascript
layui 图片上传+表单提交+ Spring MVC的实例
2019/09/21 Javascript
JavaScript实现模态对话框实例
2020/01/13 Javascript
jQuery实现王者荣耀手风琴效果
2020/01/17 jQuery
[05:46]DOTA2英雄梦之声_第18期_陈
2014/06/20 DOTA
Python查找最长不包含重复字符的子字符串算法示例
2019/02/13 Python
Python实现计算文件MD5和SHA1的方法示例
2019/06/11 Python
python使用mitmproxy抓取浏览器请求的方法
2019/07/02 Python
python实现LBP方法提取图像纹理特征实现分类的步骤
2019/07/11 Python
python实现的读取网页并分词功能示例
2019/10/29 Python
Python实现点云投影到平面显示
2020/01/18 Python
Python selenium键盘鼠标事件实现过程详解
2020/07/28 Python
python 实现压缩和解压缩的示例
2020/09/22 Python
硕士研究生自我鉴定范文
2013/12/27 职场文书
校庆活动方案
2014/03/31 职场文书
项目经理任命书范本
2014/06/05 职场文书
学校查摆问题整改措施
2014/09/28 职场文书
物业前台接待岗位职责
2015/04/03 职场文书
办公用品管理制度
2015/08/04 职场文书