jQuery常用事件

jQuery在原来js的基础上,增加并且拓展了基本的事件处理机制,封装了部分方法,比如各浏览器的处理统一性上,提供了更加简单的处理语法,增强了事件处理的能力,真所谓:“write less,do more”,本节我们就来看看jQuery的事件处理机制。
一、事件绑定
语法:bind(type,[data],f)
参数说明:
type:事件类型,常见的如click,dblclick,mouseover等等,支持的事件类型很多,使用的时候可以查找,开发者也可以自己定义自己的类型名字,比如myClick等。
data:额外的数据对象。
f:绑定的处理函数。
我们来看一个例子,这个例子类似于前面在html5中介绍到的details+summary组合形成的展开收缩的效果,这样的功能我们在后面还会经常看到。
    <span>click me</span>
    <p>
      Test bind
    </p>

$(function(){
  jQueryTest.showOnOff();
});
var jQueryTest = {
  "showOnOff" : function(){
	  $("span").bind("click",function(){
	  if($("p").is(":visible")) {
	    $("p").hide();
	  } else {
	    $("p").show();
	  }
	  });
}};

实现的效果是,点击click me块,就可以显示/隐藏Test bind块。主要是为span元素绑定(bind)了click事件,通过可见/不可见来控制显示和隐藏。当然这种绑定我们也可以简写成$("span").click(function(){...})的形式。
二、合成事件
hover和toggle是jQuery的两个合成事件方法。
hover()方法:
语法:hover(enter,leave)
当光标移上去时触发第一个函数enter,当光标移出去时触发第二个函数leave,这好比mouseover/mouseout以及mouseenter/mouseleave的效果。下面的代码实现的效果跟绑定mouseover/mouseout的一样。
  "showHover" : function(){
    $("span").hover(function(){
        $("p").hide();
      }, function(){
          $("p").show();
        });
    }

toggle()方法:
语法:toggle(f1,f2,....fn)
第n次单击元素,触发函数fn,连续单击下去降轮回调用循环调用下去。这里不做详细介绍了,可以类比hover方法来实现,基本类似。可以配合addClass/removeClass来使用。
三、事件冒泡
冒泡顾名思义,很形象就是水泡向上冒,冒泡排序也就是这么个意思。我们来看看事件冒泡到底是怎么一回事。
我们用元素的层级关系来说明冒泡,假设页面上有三个元素,分别为body,article,section,其中body是另外两个的父元素,而section是article的子元素
    <article>
       外层article元素
      <section>
       内层section元素
      </section>
      外层article元素
    </article>
    <article id="show"></article>

为三个元素都绑定click事件
    "bubbling" : function(){
      $("section").click(function(){
        $("#show").html($("#show").html() + "section clicked</br>");
      });
      $("article").click(function(){
        $("#show").html($("#show").html() + "article clicked</br>");
      });
      $("body").bind("click",function(){
        $("#show").html($("#show").html() + "body clicked</br>");
      });
      }

这样的后果是,当点击了section元素,那么外层的article和body元素的click事件都将被调用,会输出三条消息,这并不是我们最初想要的结果,我们只是想看到section被点击的消息。这样就会产生冒泡,以section/article/body从下至上的顺序产生冒泡过程。
为了避免冒泡产生的以为结果,我们可以采用时间对象,为函数添加一个event参数,这样当单击元素时,事件对象被创建,而且该对象只有事件对应的函数才能访问,处理完毕后,对象就被销毁。结合stopPropagation()方法来停止事件冒泡。我们可以把以上section的绑定代码修改成如下:
      $("section").click(function(event){
        $("#show").html($("#show").html() + "section clicked</br>");
        event.stopPropagation();
      });

这样当单击section元素时,只会出现section clicked的消息,外层的两个元素的click时间不会被触发。
四、事件对象的属性和方法
    event.type:获取时间的类型
    event.preventDefault():阻止默认的事件行为
    event.stopPropagation():阻止事件冒泡
    event.target:获取到触发事件的元素
    event.pageX/pageY:获取光标的x/y坐标
    event.which:获取鼠标的左/中/右键,左=1/中=2/右=3
    event.metaKey:获取ctrl键,返回布尔值等等。
五、移除事件
语法:unbind(type,data)
参数说明:
type:事件类型
data:移除的函数名
使用例:$("element").unbind()或$("element").unbind("click")或$("element").unbind("click",myF)都可以。
六、模拟用户行为
不要用户操作,自动执行一些动作。
trgger:$("element").trgger("click")自动执行click事件。
最后再说明一下自定义事件,前面都是讲的现有事件,当然开发者可以自定义自己的事件名称。比如下面的代码是可以的:
      $("section").bind("iClick",function(){
        //TODO
      });
      $("section").trigger("iClick");

本节就简单介绍了jQuery的常用事件处理机制,在开发中要灵活运用,能起到事半功倍的效果。下节讲介绍动画的相关知识。

你可能感兴趣的:(jquery,bind,stopPropagation,事件冒泡,toggle)