随着现在JQuery这个javascript的越来越强大,在我们平常的前端UI开发,如果不使用JQuery,说明你已经很out了。今天我们来学习一下 JQuery的bind事件。虽然,这个话题被很多写了很多,但我还是想自己在这里班门弄斧一下,希望各位看官不要喷。如果有什么意见,可以直接进行交流,共同进步。

JQuery 官网的Bind事件的API吧:地址连接。如果各位有兴趣看洋文的,可是去看看。

刚开始我们先看一下它的定义:

.bind( eventType [, eventData], handler(eventObject))

.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

Html Code:

	1 <input id="BtnFirst"type="button"value="Click Me"/>

JavaScript Code:

	1 $(function () {
2 $("#BtnFirst").bind("click", function () {
3 alert("Hello World");
4 });
5 })

打开页面之后,点击按钮“Click Me”,就会弹出”Hello World”。这算是我们最简单的绑定事件吧。很简单吧。

2.绑定多个事件

我们可以通过bind()来绑定多个事件(其实,这也就是JQuery以及Linq中非常有名的链式编程)。实现的主要功能就是当我们点击的时候,弹出“Hello World”,当离开button的时候,显示出一个div。

Html Code:

	1 <div>
2 <input id="BtnFirst"type="button"value="Click Me"/></div>
3 <div id="TestDiv"style=" width:200px; height:200px; display:none; background-color:Red;">
4 </div>

JavaScript Code:

	1 $(function () {
2 $("#BtnFirst").bind("click", function () {
3 alert("Hello World");
4 }).bind("mouseout", function () {
5 $("#TestDiv").show("slow");
6 });
7 })

这段代码页很容易理解,就是当button被点击的时候,弹出一个"Hello World",在离开的时候,在把div给显示出来。JQuery里的动画,均可以用“slow”、“fast”和“normal”,当然你还可以设置相关的毫秒数。

3.bind()事件的对象

Handler这个回调函数可以接受一个参数,当这个函数被调用时,一个JavaScript事件对象会作为一个参数传进来。

这个事件对象通常是没有必要且可以省略的参数,因为当这个事件处理函数绑定的时候就能够明确知道他在触发的时候应该做些什么,通常就已经可以获得充分的信息了。然而在有些时候,在事件初始化的时候需要获取更多关于用户环境的信息。

给一个JQuery官网上面的例子:

Css Code:

	1 <style> 2 p {background:yellow;font-weight:bold;cursor:pointer;3 padding:5px;}
4 p.over {background:#ccc;}
5 span {color:red;}
6 </style>

Html Code:

	1 <p>Click or double click here.</p>
2 <span></span>

JavaScript Code:

	1 <script>
2 $("p").bind("click", function(event){
3 var str = "( " + event.pageX + ", " + event.pageY + " )";
4 $("span").text("Click happened! " + str);
5 });
6 $("p").bind("dblclick", function(){
7 $("span").text("Double-click happened in " + this.nodeName);
8 });
9 $("p").bind("mouseenter mouseleave", function(event){
10 $(this).toggleClass("over");
11 });
12
13 </script>

这里的主要功能是为了实现当用户点击p这个对象的时候,把当前相对于页面的坐标显示在span标签里面,这里就用到了event这个事件。把参数传进去。
4.unbind()事件

unbind([type],[data],Handler) 是 bind()的反向操作,从每一个匹配的元素中删除绑定的事件。如果没有参数,则删除所有绑定的事件。你可以将你用bind()注册的自定义事件取消绑定。如果提供了事件类型作为参数,则只删除该类型的绑定事件。如果把在绑定时传递的处理函数作为第二个参数,则只有这个特定的事件处理函数会被删除。

Html Code:

	1 <body onclick="MyBodyClick()">
2 <div onclick="MyClickOut()">
3 <div onclick="MyClickInner()">
4 <span id="MySpan">I love JQuery!! </span>
5 </div>
6 </div>
7 <span id="LooseFocus">失去焦点</span>
8 </body>

JavaScript Code:

	1  function MyClickOut() {
2 alert("outer Div");
3 }
4 function MyClickInner() {
5 alert("Inner Div");
6 }
7 function MyBodyClick() {
8 alert("Body Click");
9 }
10 var foo = function () {
11 alert("I'm span.");
12 }
13 $(function () {
14 $("#MySpan").bind("click", foo);
15 })
16 $(function () {
17 $("#LooseFocus").unbind("click", foo);
18 })

上面的代码也很好理解,就是当用户的鼠标在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()代码的实现:

	1 bind : function(type, data, fn) {
2 return type == "unload" ? this.one(type, data, fn) : this
3 .each(function() {//fn || data, fn && data实现了data参数可有可无
4 jQuery.event.add(this, type, fn || data, fn && data);
5 }); },

One()  代码的实现:

	1 one : function(type, data, fn) {
2 var one = jQuery.event.proxy(fn || data, function(event) {
3 jQuery(this).unbind(event, one);
4 return (fn || data).apply(this, arguments);/this->当前的元素
5 });
6 return this.each(function() {
7 jQuery.event.add(this, type, one, fn && data);
8 });
9 },

5.最后呢,其实想在贴一个冒泡事件,因为在处理绑定事件的时候,如果调用内部的事件 有可能会触发外面的事件,所以给大伙一个借鉴吧。

javascript事件冒泡的文章:http://www.2cto.com/kf/201111/110252.html

简单的说,何为冒泡事件?其实,简单的理解是,也可以说是事件传播,它会从内部的控件广播到父类的元素,然后接着一直往上到祖先级别的元素。

则 冒泡实例代码:

Html Code:

	1 <body onclick="MyBodyClick()">
2 <div onclick="MyClickOut()">
3 <div onclick="MyClickInner()">
4 <span id="MySpan">
5 I love JQuery!!
6 </span>
7 </div>
8 </div>
9 </div>
10 </body>

JavaScript Code:

	1 <script type="text/javascript">
2 function MyClickOut() {
3 alert("outer Div");
4 }
5 function MyClickInner() {
6 alert("Inner Div");
7 }
8 function MyBodyClick() {
9 alert("Body Click");
10 }
11
12 $(function () {
13 $("#MySpan").bind("click", function (event) {
14 alert("I'm span");
15 event.stopPropagation();
16 });
17 </script>

关于jquery.bind的更多相关文章

  1. jquery bind、delegate、live、on的区别及联系

    jquery bind.delegate.live.on的区别及联系 概述 jquery提供了好几个API都可以实现事件绑定, 如 delegate, live , bind 等, 可是有没有疑惑这几 ...

  2. jquery bind()方法与live()方法的区别

    jquery bind() 方法和 live() 方法都可以绑定元素事件. <!DOCTYPE html> <html> <head> <meta chars ...

  3. jquery bind()方法 语法

    jquery bind()方法 语法 作用:bind() 方法为被选元素添加一个或多个事件处理程序,并规定事件发生时运行的函数. 说明:规定向被选元素添加的一个或多个事件处理程序,以及当事件发生时运行 ...

  4. jQuery.bind() 函数详解

    bind()函数用于为每个匹配元素的一个或多个事件绑定事件处理函数. 此外,你还可以额外传递给事件处理函数一些所需的数据. 执行bind()时,事件处理函数会绑定到每个匹配元素上.因此你使用bind( ...

  5. jQuery -> bind / live / delegate 的终结者 - on

    Bind()方法: 给元素绑定事件 形式: .bind(eventType[,eventData],handler(eventObject)) eventType,string类型,一个或多个DOM事 ...

  6. JQuery..bind命名空间

    先看手册,由于bind方法有三个参数(type,[data],fn),所以手册上这么介绍: .bind() 方法是用于往文档上附加行为的主要方式.所有JavaScript事件对象, 比如focus, ...

  7. jQuery bind and unbind (绑定和解除)

    测试:页面代码: <body> <input type="button" name="aaa" value="点击我"&g ...

  8. jQuery bind() live()

    <script type="text/javascript"> $(document).ready(function () { /*$('.clickme').live ...

  9. jQuery bind()与delegate()的区别

    笔试题: bind()与delegate()的区别主要有三点: 1 绑定目标 .bind直接绑在目标元素上 .delegate绑在父元素上 2  监听个数 .bind监听个数多——每个目标元素都需要添 ...

随机推荐

  1. 易通电脑锁2007V6.3.3.3无法卸载问题解决办法

    易通电脑锁2007V6.3.3.3无法卸载问题解决办法把原版文件拷贝回去.bat@echo offcolor 2Fecho 该批处理会把易通电脑锁2007版原文件拷贝回去,解决易通电脑锁卸载时出现的运 ...

  2. dede在线留言

    登录dede后台,在[核心]---[频道维护]---[自定义表单]中根据需要创建需要的表单.   点击[增加新的自定义表单],添加在线留言表单.确定即可. 注意: ①在这里只需要修改[自定义表单名称: ...

  3. 使用mybatis操作mysql数据库SUM方法返回NULL解决

    使用SQL语句用函数SUM叠加的时候,默认查询没有值的情况下返回的是NULL,而实际可能我们要用的是返回0 解决: SELECT SUM(total)   FROM test_table 改成: SE ...

  4. postgresql 触发器

    一.创建事件触发器 1.ddl_command_start - 一个DDL开始执行前被触发: 2.ddl_command_end - 一个DLL 执行完成后被触发: 3.sql_drop -- 删除一 ...

  5. ThinkPHP框架如何修改X-Powered-By

    以前用ThinkPHP框架开发了一个小网站,前几天查询页面HTTP状态发现,里面有一项: X-Powered-By: ThinkPHP 2.0 这样虽然没什么,但感觉如果别有用心的人查询会知道你是用这 ...

  6. VS2010中将当前选定项目做为启动项

    Visual Studio 2010一个解决方案中多个项目,如果想选择哪个项目就设置哪个项目为启动项可以这么做. 一.对于以后新建的解决方案想这样通过VS设置工具: 二.对于已经存在的解决方案可以这样 ...

  7. iOS开发UIScrollView的底层实现

    起始 做开发也有一段时间了,经历了第一次完成项目的激动,也经历了天天调用系统的API的枯燥,于是就有了探索底层实现的想法. 关于scrollView的思考 在iOS开发中我们会大量用到scrollVi ...

  8. Android receiver

    可以在代码文件中声明一个receiver,也可以在manifest中声明一个,前者中的receiver只有在该activity launch起来以后才会监听其所感兴趣的事件, 而如果在androidM ...

  9. ios基础篇(九)——自定义UITabBar

    上一篇讲到了UITabBarViewController,接着说说UITabBarViewController中怎么自定义TabBar. 今天仿写了微博,发现底部tabbar中间的button和其他有 ...

  10. Java多线程-新特性-有返回值的线程

    在Java5之前,线程是没有返回值的,常常为了“有”返回值,破费周折,而且代码很不好写.或者干脆绕过这道坎,走别的路了. 现在Java终于有可返回值的任务(也可以叫做线程)了. 可返回值的任务必须实现 ...