• click()、bind()、live()和delegate()方法


    我之前使用click()比较多,又来因为网页内容需要前端生成用了live().有的时候使用click()和bind()分不清楚该怎么试用.查了很多资料.测试了很多次,自己明白了.

    总结如下:代码注释很详细,感觉不用在分段写了.都写在一起了.

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>Title</title>
     6 </head>
     7 <body>
     8 <a href="#">点击</a>
     9 <div class="box" style="cursor:pointer;">live</div>
    10 <div id="test"><a href="#">live支持链式编程吗?</a></div>
    11 <script type="text/javascript" src="js/jquery-1-8-3.js"></script>
    12 <script type="text/javascript">
    13     $(function(){
    14         $("<div class='box2' style='cursor:pointer;'>live</div>").appendTo("body");
    15     });
    16     $("a").click(function(){
    17         console.log("click");
    18     });
    19     /***
    20      *click()方法是bind()方法的一种简单方法.
    21      * 在bind()中, jQuery所有JavaScript事件对象, 比如focus, mouseover, resize, mousemove和mouseout,都可以作为type参数传递进来的.
    22      */
    23     var message = "left";
    24     $("a").bind("click",{ msg: message }, function(e) {
    25         console.log(e.data.msg);
    26         return false;
    27     });
    28     var message = "right";
    29     $("a").bind("contextmenu",{ msg: message }, function(e) { //contextmenu:鼠标右击与键盘的菜单触发键
    30         console.log(e.data.msg);
    31         return false;
    32     });
    33     /***
    34      * 这样当我们左键单击<a>时,输出"left";当右键单击<a>时,输出"right".
    35      */
    36 
    37     /***
    38      * live()给所有匹配的元素附加一个时间处理函数, 即使这个元素是以后添加进来的也有效.
    39      */
    40     $("div.box").bind("click", function() {
    41         console.log("success bind");
    42     });
    43 
    44     /***
    45      * 当点击class="box"为live时, 打印出success.
    46      * 此时,如果有新元素添加进来,该如何操作?
    47      * 这时, 当使用上边方法点击class为live的a标签时, 不会执行.
    48      * 原因:这个元素是在调用bind()之后添加的, 而使用live方法使得在后边添加的元素也能够执行相应的事件.
    49      */
    50     $("div.box2").live("click", function() {
    51         console.log("success live");
    52     });
    53     /***
    54      * live()方法不支持链式编程
    55      */
    56     $("#test").children("a").live("mouseover", function() {
    57         console.log("支持链式编程");//报错,不支持链式编程  Error: Syntax error, unrecognized expression: #test.children(a)
    58     });
    59     
    60     /***
    61      * 上面这种写法并不会输出, 我们这个时候可以使用delegate()
    62      */
    63     $("#test").delegate("a", "mouseover", function() {
    64         console.log("delegate");
    65     });
    66     /***
    67      * 这样就可以输出想要的结果.
    68      */
    69 </script>
    70 </body>
    71 </html>
  • 相关阅读:
    第24天:Python 标准库概览2
    第23天:Python 标准库概览1
    第22天:Python NameSpace&Scope
    第21天: Web 开发 Jinja2 模板引擎
    第20天:Python 之装饰器
    第19天:Python 之迭代器
    第18天:Python 高阶函数
    第17天:Python 函数之参数
    第16天:Python 错误和异常
    第15天:Python set
  • 原文地址:https://www.cnblogs.com/liubeimeng/p/5850393.html
Copyright © 2020-2023  润新知