zoukankan      html  css  js  c++  java
  • js中事件绑定要注意的事项之如何在方法中自己打印自己的值

    下面是错误的js方法绑定,这样写会造成在方法中不能用 调用方法的dom本身的一些 东西,如各种属性或者jq对象等。

     1 <!DOCTYPE html>
     2 <html>
     3 
     4     <head>
     5         <meta charset="utf-8" />
     6         <title></title>
     7     </head>
     8     <script type="text/javascript" src="js/jquery-1.8.0.js"></script>
     9 
    10     <body>
    11         <!-- 下面是用纯动态方式生成标签 -->
    12         <div id="d2">
    13             动态生成a标签
    14         </div>
    15         
    16         <div id="d3">
    17             <input type="button" value="生成a标签" id="btn"/>
    18             
    19         </div>
    20     </body>
    21     <script>
    22         ///错误的写法:
    23         
    24         var i = 0;
    25         $(function() {
    26             ///点击按钮,给d2动态添加标签
    27             $('#btn').bind('click', function() {
    28                 /* 在添加标签的同时给添加的标签绑定点击事件 */
    29                 $("<li onclick='show()' num='"+(++i)+"'>Hello</li>").appendTo("#d2");
    30             });
    31     
    32         })
    33     
    34         function show() {
    35             alert($(this).text());///这样打印出的是空的,没有任何东西,但是方法是会触发的(不能这样打印自己)
    36             alert($(this).attr("num"));///打印的是undefined 因为$(this)不能用
    37             alert("哈哈");
    38             $(this).remove();//方法无效,不能自己删除自己(页面没有效果)
    39         }
    40     </script>
    41 
    42 </html>

    下面才是正确的写法:

     1 <!DOCTYPE html>
     2 <html>
     3 
     4     <head>
     5         <meta charset="utf-8" />
     6         <title></title>
     7     </head>
     8     <script type="text/javascript" src="js/jquery-1.8.0.js"></script>
     9 
    10     <body>
    11         <!-- 下面是用纯动态方式生成标签 -->
    12         <div id="d2">
    13             动态生成a标签
    14         </div>
    15         
    16         <div id="d3">
    17             <input type="button" value="生成a标签" id="btn"/>
    18             
    19         </div>
    20     </body>
    21     <script>
    22         ///正确的写法
    23         
    24         var i = 0;
    25         $(function() {
    26             ///点击按钮,给d2动态添加标签
    27             $('#btn').bind('click', function() {
    28                 /* 在添加标签的同时给添加的标签绑定点击事件 */
    29                 $("<li onclick='show(this)' num='"+(++i)+"'>Hello</li>").appendTo("#d2");
    30             });
    31 ////注意:在标签中的绑定方法中加了个参数 this,代表js元素的dom对象本身【注意:只能用this】会传递到方法体中
    32     
    33         })
    34     
    35 /*在方法定义端,参数中随便加个变量即可,
    36     如obj或者o或者a等任意变量符号都行,且其不用事先用var定义,可以直接用
    37         然后在方法体中就可以用obj.value【原生的js对象的属性使用方法】或者$(obj).val()【jq的对象方法】等来操作dom本身了
    38 */
    39         function show(obj) {
    40             alert($(obj).text());///这样会政策打印出方法的text即这里的Hello
    41             alert($(obj).attr("num"));///打印属性也没问题
    42             alert("哈哈");
    43             $(obj).remove();//自己删除自己也是好用的
    44         }
    45     </script>
    46 
    47 </html
    48 <!--
    49     正确的绑定方法和原来错误的方法只有一点小区别,即:
    50     1.在html标签中,绑定方法的时候,方法中加上一个参数 this【只能是this,不能用其他变量】
    51     2.在方法的定义位置,方法的参数中用任意一个变量来接收页面上传递过来的this(即调用当前方法的原生js的dom对象)
    52     3.在方法体中就可以用2中定义的 变量.js原生属性  或者 $(变量).val()等jq封装后的方法来对调用者dom本身进行各种操作了。
    53     
    54     当然,如果标签不是拼接时绑定的方法,而是后来动态绑定的,那么可以用live 方法达到同样的效果
    55     【注意:只能用live方法给动态标签绑定事件,在事件中才可以操作标签本身,如果用bind方法是不能操作标签本身相关的】
    56         eg:
    57             ///bind方法对于动态添加的标签不好使,其只对已经存在的静态标签好用
    58             
    59               ///用live方法才好用,用live时,方法体中可以直接写 this和 $(this)
    60               $('li').live('click', function() {
    61                alert($(this).text());///注意,用live还可以这样写,结果是正常的
    62                alert("haha");
    63                $(this).remove();///用live方法,这都可以,自己删自己 好使.
    64               });
    65               
    66 -->
  • 相关阅读:
    android闹钟小案例之知识点总结
    转载---程序员发展之路
    android闹钟小案例之功能阐述
    基础篇:2.熟练掌握相关监听器的注册和使用
    基础篇:1.掌握基本组件和容器组件的使用
    微博分享、注销功能的实现
    新浪微博授权认证的实现
    新浪微博分享功能的简单实现
    读《编程高手箴言》笔记一
    Spark内核架构核心组件.txt
  • 原文地址:https://www.cnblogs.com/libin6505/p/7405842.html
Copyright © 2011-2022 走看看