• 技术文章 >php教程 >PHP源码

    JQuery中Bind()事件用法分析_jquery

    PHP中文网PHP中文网2016-05-25 16:59:49原创375
    这篇文章主要介绍了JQuery中Bind()事件用法,实例分析了Bind()事件的功能、特点与绑定事件时的使用技巧,需要的朋友可以参考下

    本文实例分析了JQuery中Bind()事件用法。分享给大家供大家参考。具体分析如下:

    我们先看一下它的定义:

    .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

    <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的时候,显示出一个p。

    <p>
    <input id="BtnFirst"type="button"value="Click Me"/></p>
    <p id="Testp"style=" width:200px; height:200px; display:none; ">
    </p>
    <script>
    $(function () {
     $("#BtnFirst").bind("click", function () {
      alert("Hello World");
     }).bind("mouseout", function () {
      $("#Testp").show("slow");
     });
    })
    </script>

    这段代码页很容易理解,就是当button被点击的时候,弹出一个"Hello World",在离开的时候,在把p给显示出来。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()">
     <p onclick="MyClickOut()">
      <p onclick="MyClickInner()">
       <span id="MySpan">I love JQuery!! </span>
      </p>
     </p>
     <span id="LooseFocus">失去焦点</span>
    </body>
    <script>
    function MyClickOut() {
     alert("outer p");
    }
    function MyClickInner() {
     alert("Inner p");
    }
    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()">
     <p onclick="MyClickOut()">
      <p onclick="MyClickInner()">
        <span id="MySpan">
         I love JQuery!!
        </span>
      </p>
     </p>
    </body>
    <script type="text/javascript">
     function MyClickOut() {
      alert("outer p");
     }
     function MyClickInner() {
      alert("Inner p");
     }
     function MyBodyClick() {    
      alert("Body Click");
     }
     $(function () {
      $("#MySpan").bind("click", function (event) {
       alert("I'm span");
       event.stopPropagation();
     });
    </script>
    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:JQuery Bind()事件
    上一篇:ZF框架Session会话周期及次数限制 下一篇:php使用curl抓取qq空间的访客信息示例_php技巧
    PHP编程就业班

    相关文章推荐

    • php 多种无限分类实例• PHP session实现跨子域的几种办法• 剖析PHP中的输出缓冲 flush之类• 整理php操作memcache缓存基础方法• php截取中文字符串不乱码的方法_php实例

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网