jquery事件绑定只点击一次
jquery事件绑定只点击一次,想法就是绑定事件,函数内在执行时候 取消绑定事件。
$('#my-selector').bind('click', function() { $(this).unbind('click'); alert('Clicked and unbound!'); });
或者one() 方法为被选元素附加一个或多个事件处理程序,并规定当事件发生时运行的函数。
当使用 one() 方法时,每个元素只能运行一次事件处理器函数。
$("p").one("click",function(){ $(this).animate({fontSize:"+=6px"}); });
ajax页面底部 滚动加载效果 实例
html部分:
<ul id="scrollBox"> //ajax读取的 data.html 使用append 的方式添加到这里 </ul> <div id="scrollPages"> //ajax 状态文字输出到这里 【数据加载中】【数据加载成功】【没有数据了】 </div>
js代码需要jquery支持。
//滚动加载 开始 $(function(){ var loading = false; // 状态锁 默认 false var next_url = 'ajax.php'; //ajax读取数据地址,ajax 每次都修改为 data.next_url 下一页地址 var $pages = $('#scrollPages'); //绑定 分页容器 分页状态 在此位置输出 var $scrollBox = $('#scrollBox'); // 绑定内容 ajax 把 var _loading = function(){ console.log('数据加载中...'); $pages.html('数据加载中...'); } var _loadok = function(){ console.log('数据加载成功!'); $pages.html('数据加载成功!'); } var _nodata = function(){ console.log('没有数据了') ; $pages.html('没有数据了'); } $(window).scroll(function(){ var sH = $(document).height() - $(this).scrollTop() - $(this).height();//页面底部距离 var sp = $(window).height() - ( $pages.offset().top - $(document).scrollTop() ) ; //分页div 距离win 底部 if( loading ){return false ;} //条件 if ( sp > 33 ){ loading = true; _loading(); $.getJSON(next_url,{}, function(data){ console.log(data); next_url = data.next_url; if(data.html){ $scrollBox.append( data.html ); $('.zzbsList .zzbsInfo').txtCur({n:60}); loading = false; _loadok(); } //判断是否还有吓一跳 if( !next_url ){ loading = true ; _nodata() }; }); } });// 滚动 结束 $(window).scroll //页面加载完成 清空$scrollBox 内容 //页面加载完成 执行第一次 $(window).scroll(); });
php 文件 ajax.php 代码:
<?php header("Content-type:text/html;charset=utf-8"); //休息1秒钟 ,模拟网速不好,可以看清 ajax状态变化 sleep(1); //读取GET提交的页码 $p = (int)$_GET['p'] ; //准备返回的数据 $d = array(); //下一页 地址 $d['next_url'] = 'api/bisai-list.php?p='.($p+1); //数据 html格式 ,jquery会把他插入到 <ul id="scrollBox"> 中。 $d['html'] = '<li> ajax 读取到的数据,当前页面 '.($p+1).' </li>'; //简单判读 只有10页面内容 if($p > 10){ $d = array(); //没有数据了 js 主要判断 $d['next_url'] 的值 } //返回json数据 die(json_encode($d)); ?>
————–我是分割线—————
上边的 js 代码存在一个问题。
//页面加载完成 执行第一次$(window).scroll(); 尽管调用了滚动事件,但无法满足条件: if ( sp > 33 ) 出发ajax加载数据。
后来想想,干脆把 ajax加载数据部分代码封装成函数_ajaxLoad,在需要的时候直接调用。
1.页面第一加载时调用
2.滚动满足条件时调用
修改js代码如下:
//滚动加载 开始 $(function(){ var loading = false; // 状态锁 默认 false var next_url = 'api/bisai-list.php'; //ajax读取数据地址,ajax 每次都修改为 data.next_url 下一页地址 var $pages = $('#scrollPages'); //绑定 分页容器 分页状态 在此位置输出 var $scrollBox = $('#scrollBox'); // 绑定内容 ajax 把 var _loading = function(){ console.log('数据加载中...'); $pages.html('数据加载中...'); } var _loadok = function(){ console.log('数据加载成功!'); $pages.html('数据加载成功!'); } var _nodata = function(){ console.log('没有数据了') ; $pages.html('没有数据了'); } var _ajaxLoad = function(){ loading = true; _loading(); $.getJSON(next_url,{}, function(data){ console.log(data); next_url = data.next_url; if(data.html){ $scrollBox.append( data.html ); $('.zzbsList .zzbsInfo').txtCur({n:60}); loading = false; _loadok(); } //判断是否还有吓一跳 if( !next_url ){ loading = true ; _nodata() }; }); } $(window).scroll(function(){ var sH = $(document).height() - $(this).scrollTop() - $(this).height();//页面底部距离 var sp = $(window).height() - ( $pages.offset().top - $(document).scrollTop() ) ; //分页div 距离win 底部 console.log(sp); if( loading ){return false ;} if ( sp > 33 ){ //滚动满足条件时调用 加载数据 _ajaxLoad(); } }); //页面加载完成 执行第一次加载数据 _ajaxLoad(); }); //滚动加载 结束
jQuery on() 的使用方法
jQuery on()方法是官方推荐的绑定事件的一个方法。
$(selector).on(event,childSelector,data,function,map)
由此扩展开来的几个以前常见的方法有.
bind()
$("p").bind("click",function(){
alert("The paragraph was clicked.");
});
$("p").on("click",function(){
alert("The paragraph was clicked.");
});
delegate()
$("#div1").on("click","p",function(){
$(this).css("background-color","pink");
});
$("#div2").delegate("p","click",function(){
$(this).css("background-color","pink");
});
live()
$("#div1").on("click",function(){
$(this).css("background-color","pink");
});
$("#div2").live("click",function(){
$(this).css("background-color","pink");
});
以上三种方法在jQuery1.8之后都不推荐使用,官方在1.9时已经取消使用live()方法了,所以建议都使用on()方法。
tip:如果你需要移除on()所绑定的方法,可以使用off()方法处理。
$(document).ready(function(){
$("p").on("click",function(){
$(this).css("background-color","pink");
});
$("button").click(function(){
$("p").off("click");
});
});
tip:如果你的事件只需要一次的操作,可以使用one()这个方法
$(document).ready(function(){
$("p").one("click",function(){
$(this).animate({fontSize:"+=6px"});
});
});
trigger()绑定
$(selector).trigger(event,eventObj,param1,param2,...)
$(document).ready(function(){
$("input").select(function(){
$("input").after(" Text marked!");
});
$("button").click(function(){
$("input").trigger("select");
});
});
多个事件绑定同一个函数
$(document).ready(function(){
$("p").on("mouseover mouseout",function(){
$("p").toggleClass("intro");
});
});
多个事件绑定不同函数
$(document).ready(function(){
$("p").on({
mouseover:function(){$("body").css("background-color","lightgray");},
mouseout:function(){$("body").css("background-color","lightblue");},
click:function(){$("body").css("background-color","yellow");}
});
});
绑定自定义事件
$(document).ready(function(){
$("p").on("myOwnEvent", function(event, showName){
$(this).text(showName + "! What a beautiful name!").show();
});
$("button").click(function(){
$("p").trigger("myOwnEvent",["Anja"]);
});
});
传递数据到函数
function handlerName(event)
{
alert(event.data.msg);
}
$(document).ready(function(){
$("p").on("click", {msg: "You just clicked me!"}, handlerName)
});
适用于未创建的元素
$(document).ready(function(){
$("div").on("click","p",function(){
$(this).slideToggle();
});
$("button").click(function(){
$("<p>This is a new paragraph.</p>").insertAfter("button");
});
});
jquery字符输入个数限制插件,支持显示剩余字符个数 iptMaxNum
jquery字符输入个数限制插件,支持显示剩余字符个数 iptMaxNum
———————————
代码如下:
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>jquery限制输入字数</title> <script type="text/javascript" src="http://code.jquery.com/jquery-1.8.3.min.js"></script> <script type="text/javascript"> /** * $.iptMaxNum(); * @charset utf-8 * @extends jquery.1.8.3 * @example * $('#Comment_txt').iptMaxNum({max:50 }); * $('#Comment_txt').iptMaxNum({max:50 , box:"#Comment_txt_num"}); */ ;(function($){ $.fn.extend({ iptMaxNum: function(options) { //默认参数 var defaults = { /* 最多多少个字符 */ max:60, /* 显示个数的容器 选择器*/ box:'' } var options = $.extend(defaults, options); return this.each(function(){ var o = options; var $this = $(this); var _boxnum =function(){ $(o.box).text( o.max -0 - $this.val().length ); } _boxnum(); $this.on("keyup , change ",function(){ var curLength=$this.val().length; if(curLength >= o.max){ var str=$this.val().substring(0, o.max ); $this.val(str); alert("超过字数限制,多出的字将被截断!" ); } else{ } _boxnum(); }) }); } }); })(jQuery); </script> </head> <body> 您还可以输入<span id="textCount">5</span>个字符<br /> <textarea name="textarea" id="TextArea" cols="45" rows="5" ></textarea> <script type="text/javascript"> $(function(){ $('#TextArea').iptMaxNum({max:50 , box:"#textCount"}); }); </script> </body> </html>
Jquery将Form表单序列化为JSON对象 Serialize Form to JSON
Jquery将Form表单序列化为JSON对象
$("form").serializeObject();
类似
$("form").serialize(); $("form").serializeArray();
$.fn.serializeObject = function() { var o = {}; var a = this.serializeArray(); $.each(a, function() { if (o[this.name]) { if (!o[this.name].push) { o[this.name] = [o[this.name]]; } o[this.name].push(this.value || ''); } else { o[this.name] = this.value || ''; } }); return o; };
来源:https://css-tricks.com/snippets/jquery/serialize-form-to-json/
其他方法:
http://blog.csdn.net/flashdelover/article/details/8185775
http://marsvaadin.iteye.com/blog/1717188
图片延迟加载插件Jquery LazyLoad
jquery.lazyload.js 是 基于 jQuery 的图片延迟加载插件,在用户滚动页面到图片之后才进行加载,对于有较多的图片的网页,使用图片延迟加载,能有效的提高页面加载速度。
使用方法:
载入 JavaScript 文件
<script src="jquery.js" type="text/javascript"></script> <script src="jquery.lazyload.js" type="text/javascript"></script>
修改 HTML 代码中需要延迟加载的 IMG 标签
<img class="lazy" src="img/grey.gif" data-original="img/example.jpg" width="640" heigh="480">
调用 Lazy Load
$("#show-housedata").find("img").lazyload({effect:"fadeIn"})
或
$(function() { $("img.lazy").lazyload({ threshold:0, //灵敏度。默认为 0 表示当图片出现在显示区域中的立即加载显示. failure_limit:0,//容差范围,检查是否在显示区域内. event:"scroll",//触发加载的事件. effect:"fadeIn",//加载使用的动画效果,如 show, fadeIn, slideDown 等jQuery自带的效果. effectspeed:5,//动画时间. container:$('.content'),//父容器。延迟加载父容器中的图片. data_attribute:"original", //真实图片地址的 data 属性后缀. skip_invisible:true,//跳过隐藏的图片. appear:null, //图片加载时的事件,参数:elements_left(未加载的图片数量)、settings. load:null//图片加载后的事件,参数同appear. }); })
官方网站:http://www.appelsiini.net/projects/lazyload
下载地址:
http://www.appelsiini.net/projects/lazyload/jquery.lazyload.min.js
https://raw.githubusercontent.com/tuupola/jquery_lazyload/master/jquery.lazyload.min.js
https://raw.githubusercontent.com/tuupola/jquery_lazyload/master/jquery.lazyload.js
用JQuery来监听浏览器改变窗口大小事件
做web开发的时候会遇到需要监听浏览器窗口大小改变事件,而进行相关操作。这里像大家介绍一下 JQuery浏览器窗口改变事件。
$(window).resize();
这里需要注意 这个事件不要写在页面加载完成事件( $(function(){…} )内部,而需要写在他外面。
<script type=”text/javascript”>
$(window).resize(function() {
var width = $(this).width();
var height = $(this).height();
alert(‘width’+width+’-height’+height);});
</script>
jQuery ligerUI 基于jQuery的网站的UI控件框架
jQuery ligerUI 是一个基于jQuery的网站的UI控件框架,简单而又强大,用于快速搭建Web前端框架。 因为是前端控件,于服务器脚本无关,因而适合asp,php,,jsp,.net等web服务器脚本语言。目前全部插件的打包压缩JS只有100K左右,很轻巧。
jQuery ligerUI中文官方网站:http://www.ligerui.com/
jQuery LigerUI V1.2.0.7z 下载地址:http://pan.baidu.com/share/link?shareid=446608&uk=1010090726
JQuery双色表格
//双色表格 $(".TableA tbody tr:odd").addClass("bg");//奇数行 $(".TableA tbody tr:even").addClass("bg");//偶数行 $(".TableA tbody tr").mouseover(function(){ $(this).addClass("over"); }).mouseout(function(){$(this).removeClass("over");});//鼠标经过离开