主页 > 专题教程 > javascript > jquery >
来源:自学PHP网 时间:2018-02-08 10:13 作者: 阅读:次
[导读] 在jQuery中有多个用于绑定事件处理程序的方法。为什么jQuery要提供如此多的事件处理方法呢?这和jQuery的版本发展历史有着密切的关系。本文还介绍什么是事件委派机制。...
|
在jQuery中有多个用于绑定事件处理程序的方法。它们是: 为什么jQuery要提供如此多的事件处理方法呢?这和jQuery的版本发展历史有着密切的关系。我们将在这篇文章中一一介绍。
bind(type,[data],fn)
参数:
第三个参数还可以是一个布尔值。将第三个参数设置为false会使默认的动作失效。
$("#btn").bind("click",{"name":"zs","age":12},function(event){
console.info(event.data.name); //输出zs
});
$('#bar').bind('mouseenter mouseleave', function() {
$(this).toggleClass('actived');
});
$("#btn").bind({
click:function(){$("p").slideToggle();},
mouseover:function(){$("body").css("background-color","red");},
mouseout:function(){$("body").css("background-color","#FFFFFF");}
});
使用
<div id="container">
<div class="row">div1</div>
</div>
我们为
$(function(){
$(".row").bind("click",function(event){
alert($(this).html()+"is clicked!");
})
})
此时,点击div1时会弹出对话框。接下来我们动态的在
$(function(){
$(".row").bind("click",function(event){
alert($(this).html()+"is clicked!");
})
// 动态添加一个新的div
$("#container").append("<div class="row">div2</div> ")
})
这时,虽然新增加的div的class也是
unbind(type,[data|fn]])
参数:
例如下面的代码取消匹配元素的所有事件绑定。
$("selector").unbind()
下面的代码取消匹配元素的click事件绑定。
$("selector").unbind("click")
在每个对象上,这个事件处理函数只会被执行一次。其它规则与
one(type,[data],fn)
参数:
例如下面的代码,列表中的列表项只会在第一次被点击时执行相应的代码。
$("li").one("click", function(){
alert( $(this).html() );
});
这个函数也会导致浏览器同名的默认行为的执行。比如,如果用 你也可以触发由 jQuery也支持 。这允许你触发或者解除绑定一组特定的事件处理函数,而无需一一个指定。你可以在事件类型后面加上感叹号 ! 来只触发那些没有命名空间的事件处理函数。
trigger(type,[data])
参数:
例如使用下面的代码可以提交表单:
$("form:first").trigger("submit")
下面的例子展示了通过
<button id="btn">点击一下</button>
<a href="#" id="link">link</a>
$(function(){
$("*").bind("click",function(event,a,b){
console.info(event.currentTarget.id+"--"+(a+b));
});
$("a[href='#']").bind("click",function(event){
//使用trigger带来的好处有:
//1、可以在其它对象中调用另外一个事件
//2、可以为事件传递参数
//3、使用trigger依然存在事件冒泡
$("#btn").trigger("click",[2,3]);
event.preventDefault();
})
});
上面的代码为页面中的所有元素绑定了click事件。然后为超链接绑定一个click鼠标点击事件,在该事件中触发按钮的click事件。 使用
另外,使用
triggerHandler(type, [data])
参数:
例如:如果你对一个focus事件执行了
<button id="old">.trigger("focus")</button>
<button id="new">.triggerHandler("focus")</button><br/><br/>
<input type="text" value="To Be Focused"/>
$("#old").click(function(){
$("input").trigger("focus");
});
$("#new").click(function(){
$("input").triggerHandler("focus");
});
$("input").focus(function(){
$("<span>Focused!</span>").appendTo("body").fadeOut(1000);
});
由于
live(type, [data], fn)
同样使用上面
<div id="container">
<div class="row">div1</div>
</div>
$(function(){
$(".row").live("click",function(event){
alert($(this).html()+"is clicked!");
})
// 动态添加一个新的div
$("#container").append("<div class="row">div2</div> ")
})
使用上面的代码,新添加的div2元素也会绑定click事件。
在jQuery的文档筛选中有一个重要的方法: closest会首先检查当前元素是否匹配,如果匹配则直接返回元素本身。如果不匹配则向上查找父元素,一层一层往上,直到找到匹配选择器的元素。如果什么都没找到则返回一个空的jQuery对象。 例如考虑下面的HTML代码:
<ul>
<li>item1</li>
<li>
<ul>
<li>item4</li>
<li id="item">item2</li>
</ul>
</li>
<li>item3</li>
</ul>
执行下面的jQuery代码:
$("#item").closest("ul").css("color","#ffaaaa");
上面的代码返回
如果将代码改为:
$("#item").closest("li").css("color","#ffaaaa");
得到的结果就是
由于closest可以从元素自己本身开始查找,所以closest非常适合用于做事件委派。 那么如何做到事件委派呢?事件委派是指绑定在祖先元素上的事件处理函数可以对在后代上触发的事件作出回应。因为所有的元素事件都会通过冒泡到根元素中,所以我们只需要在文档根元素上绑定事件即可,然后在处理时,判断一下该事件是否是我们需要处理的对象就可以了。
<div id="container">
<div class="row">div1</div>
<ul>
<li>item1</li>
<li>
<ul>
<li>item4</li>
<li id="item">item2</li>
</ul>
</li>
<li>item3</li>
</ul>
</div>
/* 模拟事件委派 */
$(function(){
$(document).bind("click",function(event){
var obj = $(event.target).closest(".row");
if((obj[0]) == event.target) alert("find!");
})
$("#container").append("<div class='row'>div2</div>");
});
执行上面的代码后,原来的div1和新插入的div2在鼠标点击时都会弹出对话框,而列表项元素被点击时不会有任何的动作发生。这就是事件委派机制。 对于
为了提高性能,
<div id="container">
<div class="row">div1</div>
</div>
$(".row","#container").live("click",function(event){
alert($(this).html())
})
此时,
如果
die(type, [fn])
参数:
例如下面的代码给按钮解除click事件。
function aClick() {
$("div").show().fadeOut("slow");
}
$("#unbind").click(function () {
$("#theone").die("click", aClick)
});
由于
delegate(selector,[type],[data],fn)
参数:
例如还是使用前面的例子:
<div id="container">
<div class="row">div1</div>
</div>
/* 使用delegate来完成事件委派 */
$("#container").delegate(".row","click",function(event){
alert($(this).html());
})
$("#container").append("<div class='row'>div2</div>");
在jquery1.4之后,
undelegate([selector,[type],fn])
参数:
例如下面的代码从列表元素中删除由
$("li").undelegate();
在jquery1.7之前,用户可以有多种方法来完成事件的委派。在jquery1.7之后,jquery使用
on(events,[selector],[data],fn)
参数:
例如下面的代码使用
$(".row").on("click",function(event){
alert($(this).html());
})
当 而当第二个参数有值的时候,调用的对象就作为委派的根对象。例如下面的代码:
$("#container").on("click",".row",function(event){
alert($(this).html());
})
提示:在我们使用jquery进行事件处理的时候,应该使用的是
off(events,[selector],[fn])
参数:
例如下面的代码从列表元素中删除由
$("li").off();
|
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com