美文网首页代码jquery
浅谈jQuery中的on()和bind()两中函数的区别

浅谈jQuery中的on()和bind()两中函数的区别

作者: 麻不烧 | 来源:发表于2016-10-30 20:08 被阅读73次

       每一个学习Javascript的程序猿,都对jQuery不陌生。因为在工作中,如果用原生的JS和DOM来编写代码,会显得代码冗余。而jQuery的出现却很好的解决了这个问题。原来书长很长的代码,现在只需几行便可轻松解决。

    jQuery是一个快速、简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(或JavaScript框架)。jQuery设计的宗旨是“write Less,Do More”,即倡导写更少的代码,做更多的事情。它封装JavaScript常用的功能代码,提供一种简便的JavaScript设计模式,优化HTML文档操作、事件处理、动画设计和Ajax交互。

    在学习jQuery库时,我们会遇到on()和bind()两种给对象绑定事件处理函数的方法。

    bind()--为jQuery对象内含元素添加一个或多个事件处理函数,有以下一些形式。


    1.bind(eventType, function)——其中eventType为事件类型,function为事件类型触发时,执行的代码块。

    example:

    $("button").bind('click',function(){

    console.log("hello world");

    });


    2.bind(eventType, data, function)——为jQuery对象内含元素添加一个事件处理函数,支持可选的data参数。

    example:

    var handler = function(e){

    $(this).css("border","1px solid "+e.data);

    };

    $("img").bind('mouseenter','blue',handler).bind('mouseout','red',handler);

    鼠标移入图片时加上1像素蓝色的边框,鼠标移出图片时加上1像素红色的边框。


    3.bind(eventType,  function),当所选对象对应多个事件处理函数时,可以通过事件处理函数的事件类型e.type进行区分。下面这种写法和上段代码效果是一样的。

    example:

    var handler = function(e) {

    if(e.type == 'mouseenter') {

    $(this).css("border", "1px solid blue");

    } else {

    $(this).css("border", "1px solid red")

    };

    };

    $("img").bind('mouseenter mouseout', handler);


    4.bind(map)——使用JavaScript对象字面量map为jQuery对象内含元素一次添加多个事件处理函数。

    example:

    var myHandler ={  

    'mouseenter':function(){console.log("我是鼠标进入")},

    'click':function(){console.log("我是鼠标点击")},

    'mouseout':function(){console.log("我是鼠标出来")}

    };

    $("img").bind(myHandler);


    但是在实际开发工作中,人们往往更倾向于使用on()方法为对象添加事件处理函数,因为bind方法绑定的事件处理函数不会应用到后来添加到DOM中的新元素上。通俗的说,就是比如原来的图片已经添加上事件了,后来通过DOM操作创建出来的图片不会享有此事件。

    on()——支持自动绑定事件处理函数的方法,常用方法有以下两种形式。


    1.on(events,[selector],[data],function)——其中[]括号中的参数是可选的。events:一个或多个用空格分隔的事件类型和可选的命名空间。selector:一个选择器字符串用于过滤器的触发事件的选择器元素的后代。

    example:

    $("button").on('click',function(){

    console.log("hello world");

    });


    2.on(map,[selector], [data]):其中map为事件对象,可以包含一个或多个事件类型。

    example:

    var map = {

    'mouseenter':function(){

    $(this).css("border","1px solid red");

    },

    'mouseout':function(){

    $(this).css("border","none");

    }

    }

    $(document).on(map,'img');


    通过对比,可以看出.on方法比.bind方法多一个参数'selector',那么这个selector参数的好处是什么?好处就在于.on方法能够动态地为添加的元素也能绑上指定事件。例如通过on(map,'img')这种方法为图片绑定的事件,即使是后来创建出来的图片对象,也会享有此事件处理函数。

                                                                                                                                —— newArray

    浅谈jQuery中的on()和bind()两中函数的区别

    相关文章

      网友评论

        本文标题:浅谈jQuery中的on()和bind()两中函数的区别

        本文链接:https://www.haomeiwen.com/subject/yujuuttx.html