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 相关文章推荐
JavaScript DOM 学习第九章 选取范围的介绍
Feb 19 Javascript
js写的方法实现上传图片之后查看大图
Mar 05 Javascript
javascript实现手机震动API代码
Aug 05 Javascript
javascript中substring()、substr()、slice()的区别
Aug 30 Javascript
AngularJS基础教程之简单介绍
Sep 27 Javascript
AngularJS基础 ng-keydown 指令简单示例
Aug 02 Javascript
JavaScript基础之流程控制语句的用法
Aug 31 Javascript
Vue 项目代理设置的优化
Apr 17 Javascript
jquery判断滚动条距离顶部的距离方法
Sep 05 jQuery
vue 实现左右拖拽元素并且不超过他的父元素的宽度
Nov 30 Javascript
详解vue项目接入微信JSSDK的坑
Dec 14 Javascript
如何封装了一个vue移动端下拉加载下一页数据的组件
Jan 06 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实现无限级分类实现代码(递归方法)
2011/01/01 PHP
在Thinkphp中使用ajax实现无刷新分页的方法
2016/10/25 PHP
php使用自定义函数实现汉字分割替换功能示例
2017/01/30 PHP
PHP生成推广海报的方法分享
2018/04/22 PHP
理解Javascript_06_理解对象的创建过程
2010/10/15 Javascript
js实现运动logo图片效果及运动元素对象sportBox使用方法
2012/12/25 Javascript
Node.js实现JS文件合并小工具
2016/02/02 Javascript
vue中添加mp3音频文件的方法
2018/03/02 Javascript
5分钟学会Vue动画效果(小结)
2018/07/21 Javascript
Vue Render函数原理及代码实例解析
2020/07/30 Javascript
JS实现放大镜效果
2020/09/21 Javascript
[00:17]DOTA2荣耀之路5:It’s a disastah!
2018/05/28 DOTA
利用Django内置的认证视图实现用户密码重置功能详解
2017/11/24 Python
Python面向对象程序设计之私有属性及私有方法示例
2019/04/08 Python
python实现海螺图片的方法示例
2019/05/12 Python
python使用原始套接字发送二层包(链路层帧)的方法
2019/07/22 Python
Python解析json时提示“string indices must be integers”问题解决方法
2019/07/31 Python
将Pytorch模型从CPU转换成GPU的实现方法
2019/08/19 Python
Python通过Manager方式实现多个无关联进程共享数据的实现
2019/11/07 Python
详解Django配置优化方法
2019/11/18 Python
python中reload重载实例用法
2020/12/15 Python
Python修改DBF文件指定列
2020/12/19 Python
Zavvi荷兰:英国大型音像制品和图书游戏零售商
2018/03/22 全球购物
PatPat德国:妈妈的每日优惠
2019/10/02 全球购物
迪卡侬波兰体育用品商店:Decathlon波兰
2020/03/31 全球购物
教师求职自荐信
2014/03/09 职场文书
幼儿园保育员岗位职责
2014/04/13 职场文书
2014年电厂工作总结
2014/12/04 职场文书
圣诞节开幕词
2015/01/29 职场文书
先进个人总结范文
2015/02/15 职场文书
停电通知范文
2015/04/16 职场文书
领导干部失职检讨书
2015/05/05 职场文书
人力资源部工作计划
2019/05/14 职场文书
SpringBoot整合MongoDB的实现步骤
2021/06/23 MongoDB
Java实现多线程聊天室
2021/06/26 Java/Android
Python  lambda匿名函数和三元运算符
2022/04/19 Python