bind() unbind()绑定解绑事件
.bind( eventType [, eventData], handler(eventObject))
本文实例分析了JQuery中Bind()事件用法。分享给大家供大家参考。具体分析如下:
.Bind()方法的主要功能是在向它绑定的对象上面提供一些事件方法的行为。期中它的三个参数的意义分别如下:
eventType是一个字符串类型的事件类型,就是你所需要绑定的事件。这类类型可以包括如下:blur, focus, focusin, focusout, load, resize, scroll, unload, click, dblclick, mousedown, mouseup, mousemove, mouseover, mouseout, mouseenter, mouseleave, change, select, submit, keydown, keypress, keyup, error 。这里需要注意的是,这里用的都是javascript里面的事件方法,而不是JQuery里面的,JQuery里面的事件方法均在JavaScript 前面多了一个“on”,比如onclick,onblur 等等。
eventData参数是一个可选参数,不过它在平时用的比较少。如果提供了这个参数,那么我们就能把一些附加信息传递给事件处理函数了。这个参数有个很好的用处,就是处理闭包带来的问题。待会在给大家举实例。
Handler是用来绑定的处理数,其实也也就是回调函数,处理完数据之后相应的方法。
1.第一个简单的bind ()事件---Hello Word
<input id="BtnFirst"type="button"value="Click Me"/>
<script>
$(function () {
$("#BtnFirst").bind("click",function(){
alert("Hello World");
});
})
</script>
打开页面之后,点击按钮“Click Me”,就会弹出”Hello World”。这算是我们最简单的绑定事件吧。很简单吧
2.绑定多个事件
我们可以通过bind()来绑定多个事件(其实,这也就是JQuery以及Linq中非常有名的链式编程)。实现的主要功能就是当我们点击的时候,弹出“Hello World”,当离开button的时候,显示出一个div。
<div>
<input id="BtnFirst"type="button"value="Click Me"/></div>
<div id="TestDiv"style=" width:200px; height:200px; display:none; ">
</div>
<script>
$(function () {
$("#BtnFirst").bind("click", function () {
alert("Hello World");
}).bind("mouseout", function () {
$("#TestDiv").show("slow");
});
})
</script>
这段代码页很容易理解,就是当button被点击的时候,弹出一个"Hello World",在离开的时候,在把div给显示出来。JQuery里的动画,均可以用“slow”、“fast”和“normal”,当然你还可以设置相关的毫秒数。
3.bind()事件的对象
Handler这个回调函数可以接受一个参数,当这个函数被调用时,一个JavaScript事件对象会作为一个参数传进来。
这个事件对象通常是没有必要且可以省略的参数,因为当这个事件处理函数绑定的时候就能够明确知道他在触发的时候应该做些什么,通常就已经可以获得充分的信息了。然而在有些时候,在事件初始化的时候需要获取更多关于用户环境的信息。
给一个JQuery官网上面的例子:
<style>
p {background:yellow;font-weight:bold;cursor:pointer;3 padding:5px;}
p.over {background:#ccc;}
span {color:red;}
</style>
<p>Click or double click here.</p>
<span></span>
<script>
$("p").bind("click", function(event){
var str = "( " + event.pageX + ", " + event.pageY + " )";
$("span").text("Click happened! " + str);
});
$("p").bind("dblclick", function(){
$("span").text("Double-click happened in " + this.nodeName);
});
$("p").bind("mouseenter mouseleave", function(event){
$(this).toggleClass("over");
});
</script>
这里的主要功能是为了实现当用户点击p这个对象的时候,把当前相对于页面的坐标显示在span标签里面,这里就用到了event这个事件。把参数传进去。
4.unbind()事件
unbind([type],[data],Handler) 是 bind()的反向操作,从每一个匹配的元素中删除绑定的事件。如果没有参数,则删除所有绑定的事件。你可以将你用bind()注册的自定义事件取消绑 定。如果提供了事件类型作为参数,则只删除该类型的绑定事件。如果把在绑定时传递的处理函数作为第二个参数,则只有这个特定的事件处理函数会被删除。
<body onclick="MyBodyClick()">
<div onclick="MyClickOut()">
<div onclick="MyClickInner()">
<span id="MySpan">I love JQuery!! </span>
</div>
</div>
<span id="LooseFocus">失去焦点</span>
</body>
<script>
function MyClickOut() {
alert("outer Div");
}
function MyClickInner() {
alert("Inner Div");
}
function MyBodyClick() {
alert("Body Click");
}
var foo = function () {
alert("I'm span.");
}
$(function () {
$("#MySpan").bind("click", foo);
})
$(function () {
$("#LooseFocus").unbind("click", foo);
})
</script>
上面的代码也很好理解,就是当用户的鼠标在span上面停留的时候,然后把span的click事件给取消掉。所以,最后它只会弹出body里面的alert。
最后,简单的了解一下one()事件的使用,其实one和bind是一样,都是为了绑定事件而产生的。One与bind基本上差不多,不同的在调用 jQuery.event.add时,把注册的事件处理的函数做了一个小小的调整。One调用了jQuery.event.proxy进行了代理传入的事 件处理函数。在事件触发调用这个代理的函数时,先把事件从cache中删除,再执行注册的事件函数。这里就是闭包的应用,通过闭包得到fn注册的事件函数 的引用。
使用规则:
one(type,[data],fn)
为每一个匹配元素的特定事件(像click)绑定一个一次性的事件处理函数。 在每个对象上,这个事件处理函数只会被执行一次。其他规则与bind()函数相同。这个事件处理函数会接收到一个事件对象,可以通过它来阻止(浏览器)默认的行为。如果既想取消默认的行为,又想阻止事件起泡,这个事件处理函数必须返回false。
贴一下,bind和one的各自代码的实现,看官可以稍微的做一个比较:
Bind()代码的实现:
bind : function(type, data, fn) {
return type == "unload" ? this.one(type,data,fn) : this.each(function(){
//fn || data, fn && data实现了data参数可有可无
jQuery.event.add(this, type, fn || data, fn && data);
});
}
One()代码的实现:
one : function(type, data, fn) {
var one = jQuery.event.proxy(fn || data, function(event) {
jQuery(this).unbind(event, one);
return (fn || data).apply(this, arguments);
//this->当前的元素
});
return this.each(function() {
jQuery.event.add(this, type, one, fn && data);
});
}
5.最后呢,其实想在贴一个冒泡事件,因为在处理绑定事件的时候,如果调用内部的事件 有可能会触发外面的事件,所以给大伙一个借鉴吧。
这里可以参考一下javascript事件冒泡的文章:《JavaScript 事件冒泡简介及应用》。
简单的说,何为冒泡事件?其实,简单的理解是,也可以说是事件传播,它会从内部的控件广播到父类的元素,然后接着一直往上到祖先级别的元素。
则 冒泡实例代码:
<body onclick="MyBodyClick()">
<div onclick="MyClickOut()">
<div onclick="MyClickInner()">
<span id="MySpan">
I love JQuery!!
</span>
</div>
</div>
</body>
<script type="text/javascript">
function MyClickOut() {
alert("outer Div");
}
function MyClickInner() {
alert("Inner Div");
}
function MyBodyClick() {
alert("Body Click");
}
$(function () {
$("#MySpan").bind("click", function (event) {
alert("I'm span");
event.stopPropagation();
});
</script>
解帮绑定事件
$("#a").unbind().bind("click",fucntion(){})
bind() unbind()绑定解绑事件的更多相关文章
- 从零开始学 Web 之 jQuery(六)为元素绑定多个相同事件,解绑事件
大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...
- 5月23日笔记-js绑定事件、解绑事件、复合事件
each() $("p").each(function(i,ele){ //alert(ele.innerHTML); alert($("p:eq("+i+&q ...
- 从零开始学 Web 之 DOM(六)为元素绑定与解绑事件
大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... +-------------------------------------------------------- ...
- 手写instanceof (详解原型链) 和 实现绑定解绑和派发的事件类
A instanceof B 是判断 A 是否继承自B,是返回true, 否返回false 再精确点就是判断B 是否 再 A 的 原型链上, 什么是原型链,举个例子: 我们定 ...
- jQuery---jQ动画(普通,滑动,淡入淡出,自定义动画,停止动画),jQuery的事件,jQ事件的绑定/解绑,一次性事件,事件委托,事件冒泡,文档加载
jQuery---jQ动画(普通,滑动,淡入淡出,自定义动画,停止动画),jQuery的事件,jQ事件的绑定/解绑,一次性事件,事件委托,事件冒泡,文档加载 一丶jQuery动画 show,hide, ...
- 【JQ】jq动态绑定事件.on()、解绑事件off()
#JQ 绑定与解绑事件的方法的历史演变 1. jquery1.4 及之前的版本,由.click() 或 .bind()方法绑定的事件,不能适用脚本创建的新元素:即是说页面加载完成后,再动态创建的DOM ...
- python 全栈开发,Day55(jQuery的位置信息,JS的事件流的概念(重点),事件对象,jQuery的事件绑定和解绑,事件委托(事件代理))
一.jQuery的位置信息 jQuery的位置信息跟JS的client系列.offset系列.scroll系列封装好的一些简便api. 一.宽度和高度 获取宽度 .width() 描述:为匹配的元素集 ...
- linux控制USB的绑定/解绑
linux控制USB的绑定/解绑 http://www.jianshu.com/p/57293f9be558 今天工作中遇到一个问题, 要用代码实现USB的enable和disable. 谷歌了一番, ...
- 原生js绑定和解绑事件,兼容IE,FF,chrome
主要是最近项目中用到了原生的js 解绑和绑定 事件 然后今天研究了一下,其实问题不大,不过要注意不要把单词写错了,今天我就找了好久单词写错了. 需求:当鼠标移上去以后,给Select加载元素,接着解 ...
随机推荐
- iOS基础 - 触摸事件&手势识别
================================================================== 一.触摸事件&手势识别 1> 4个触摸事件,针对视图 ...
- iOS基础 - 通知中心(NSNotificationCenter)
通知中心(NSNotificationCenter) 每一个应用程序都有一个通知中心(NSNotificationCenter)实例,专门负责协助不同对象之间的消息通信 任何一个对象都可以向通知中心发 ...
- C++ 关联容器之map插入相同键元素与查找元素操作
一.插入相同键元素操作 (1)insert方法 在map中的键必须是唯一的,当想map中连续插入键相同但值不同的元素时,编译和运行时都不会发生任何错误,系统会忽略后面的对已存在的键的插入操作,如 ma ...
- REDGATE又一好用的脚本工具
REDGATE又一好用的脚本工具 REDGATE又一好用的脚本工具 先说明一下:这个工具是免费的 下载地址:http://www.red-gate.com/products/dba/sql-scr ...
- CentOS6.8安装JDK1.7
一.查看当前系统是否自带JDK rpm -qa | grep java tzdata-java-2016c-1.el6.noarch java-1.7.0-openjdk-1.7.0.99-2.6.5 ...
- DevExpress 学习使用之 NavBarControl
TNND,没辙啊,没用过那么高级的玩意儿,暂时也没找到中文的详细帮助,简直就是蚂蚁搬家似的摸索,一点儿点儿来吧. 先是NavBarControl的界面样子,貌似可以通过 PaintStyleKind ...
- ios7学习之路七(隐藏虚拟键盘,解决键盘挡住UITextField问题)
再正式开始之前,先来介绍一下IOS的键盘类型: 一.键盘风格 UIKit框架支持8种风格键盘 typedef enum { UIKeyboardTypeDefault, // 默认键盘:支持所有字符 ...
- WinForm酒店管理软件--框架
WinForm酒店管理软件--框架 搞软件开发4年多了,现在自认为还是菜鸟,从一开始走上工作岗位各种技术对我都很新奇没解决一个问题都觉得很伟大到后来开始对出路的迷茫,到现在我坚信学什么技术不重要,做什 ...
- Python -- machine learning, neural network -- PyBrain 机器学习 神经网络
I am using pybrain on my Linuxmint 13 x86_64 PC. As what it is described: PyBrain is a modular Machi ...
- AJAX实现无刷新验证用户名
register.php <html> <head> <meta http-equiv="content-type" content="te ...