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 相关文章推荐
解决jquery的datepicker的本地化以及Today问题
May 23 Javascript
兼容ie、firefox的图片自动缩放的css跟js代码分享
Aug 12 Javascript
JavaScript计时器示例分析
Feb 05 Javascript
Angularjs结合Bootstrap制作的一个TODO List
Aug 18 Javascript
基于JavaScript实现鼠标向下滑动加载div的代码
Aug 31 Javascript
jquery.guide.js新版上线操作向导镂空提示jQuery插件(推荐)
May 20 jQuery
react.js使用webpack搭配环境的入门教程
Aug 14 Javascript
js限制input只能输入有效的数字(第一个不能是小数点)
Sep 28 Javascript
jQuery实现雪花飘落效果
Aug 02 jQuery
Bootstrap告警框(alert)实现弹出效果和短暂显示后上浮消失的示例代码
Aug 27 Javascript
Vue+Java+Base64实现条码解析的示例
Sep 23 Javascript
关于JavaScript回调函数的深入理解
Jun 27 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
动易数据转成dedecms的php程序
2007/04/07 PHP
使用Sphinx对索引进行搜索
2013/06/25 PHP
php使用pdo连接并查询sql数据库的方法
2014/12/24 PHP
PHP hebrev()函数用法讲解
2019/02/21 PHP
javascript 控制 html元素 显示/隐藏实现代码
2009/09/01 Javascript
Jquery Ajax学习实例6 向WebService发出请求,返回DataSet(XML) 异步调用
2010/03/18 Javascript
动态创建样式表在各浏览器中的差异测试代码
2011/09/13 Javascript
js怎么终止程序return不行换jfslk
2013/05/30 Javascript
jquery datatable后台封装数据示例代码
2014/08/07 Javascript
javascript实现禁止鼠标滚轮事件
2015/07/24 Javascript
JavaScript判断浏览器对CSS3属性是否支持的多种方法
2016/11/13 Javascript
JS实现元素上下左右移动效果
2017/10/18 Javascript
详解Vue用自定义指令完成一个下拉菜单(select组件)
2017/10/31 Javascript
vue中的面包屑导航组件实例代码
2019/07/01 Javascript
vue-cli设置publicPath小记
2020/04/14 Javascript
react PropTypes校验传递的值操作示例
2020/04/28 Javascript
在js文件中引入(调用)另一个js文件的三种方法
2020/09/11 Javascript
微信小程序自定义modal弹窗组件的方法详解
2020/12/20 Javascript
详解node.js创建一个web服务器(Server)的详细步骤
2021/01/15 Javascript
[02:14]DOTA2英雄基础教程 修补匠
2013/12/23 DOTA
[01:31]完美与DOTA2历程
2014/07/31 DOTA
python 打印对象的所有属性值的方法
2016/09/11 Python
Python基于QRCode实现生成二维码的方法【下载,安装,调用等】
2017/07/11 Python
从CentOS安装完成到生成词云python的实例
2017/12/01 Python
python中的迭代和可迭代对象代码示例
2017/12/27 Python
python cumsum函数的具体使用
2019/07/29 Python
HTML5+CSS3:3D展示商品信息示例
2017/01/03 HTML / CSS
经销商培训邀请函
2014/01/21 职场文书
简历的自我评价范文
2014/02/04 职场文书
高等学院职业生涯规划书范文
2014/09/16 职场文书
群众路线教育实践活动心得体会(四风)
2014/11/03 职场文书
公司奖励通知
2015/04/21 职场文书
个人原因辞职信模板
2015/05/13 职场文书
2019七夕节祝福语36句,快来收藏吧
2019/08/06 职场文书
评估“风险”创业计划的几大要点
2019/08/12 职场文书
深入解析NumPy中的Broadcasting广播机制
2021/05/30 Python