zoukankan      html  css  js  c++  java
  • jQuery事件之传递参数

    我们经常使用jQuery中给DOM元素绑定事件来执行一些动态的功能,但是很少有人知道在jQuery中是如何来给DOM元素传递参数以及如何绑定自己定义的事件。
     

       这次依然在Firefox中的firebug来测试这些功能。在我的页面中有P标签,input标签(type=button)和一个img标签;
        1:传递参数:
            A:使用trigger来触发事件:
                 $('p:first').bind('myclick',function(event,arg1,arg2){
                 //第一参数event,是事件必须的,没有pageX这些属性;可以使用console.log(event)来查看
                     $(arg1).appendTo('body');
                     console.log(arg2);
                     });
                 $('input').click(function(){
                     $('p:first').trigger('myclick',//这里触发了myclick事件
                      ['<div><a href="http://www.google.com.hk">google</a></div>',//第一个参数 DOM
                       'this is to console.log']); //第二个参数 string
                     });
            B:使用bind来传递参数:
                原形:bind('事件'[,参数],函数);
                在这里参数被当做event.data的值来处理的,参数可以使任何格式的;该例为JSON格式的。
                var name_value='stonecold';
                $('p').bind('click',{name:name_vlaue},function(event){
                        //event和A中的解释一样
                     console.log(event.data.name);//结果在控制台上显示为stonecold
                       });
        2:事件相同命名空间不同事件:
             在这里我们绑定了一个命名空间:spacename,这个命名空间有点特殊,在后面
             $('img:first').bind('click.spacename',function(){
                 console.log('this is the click event for spacename ');
                });
             $('img:first').bind('mouseenter.spacename',function(){
                console.log('this is the mouseenter event for spacename');
                });
             $('img:first').bind('click',function(){
                 console.log('this is the click event without spacename ');
                });
             拆除在命名空间spacename下的所有的事件。即click这个事件还可以使用,命名空间前要有点。
            $('img:first').unbind('.spacename');
        3:相同的事件名不同的命名空间:
            $('img:first').bind('click.spacename',function(){
                 console.log('this is the click event for spacename ');
                });
            $('img:first').bind('click',function(){
                 console.log('this is the click event without spacename');
                });
        在这里如果使用上例中的bind这个函数的话是不起作用的,在这里使用trigger函数,使用后面的感叹号是不会触发有命名空间的事件。
           $('input').click(function(){
                 $('img:first').trigger('click!');
                });
        4:在简单的事件中传递参数:
           所谓的简单事件就是使用click这种格式,不是使用bind这种格式;
           在这种事件中不能直接传递参数,可以利用闭包这种JavaScript特性来传递参数;
           A:首先定义一个函数,在点击的时候触发:
              function fn_name(arg1){
               $(arg1).appendTo('body');
                   }
           B:定义一个变量作为参数传递
              var arg='<a href="http://www.google.com.hk">google<a>';
              $('img:first').click(function(){
                 fn_name(arg);
                  });
            这样就可以在事件中传递参数了;
     
     
    转自http://blog.sina.com.cn/s/blog_66a13c610100i3pj.html
  • 相关阅读:
    不同长度的数据进行位运算
    Linux的sleep()和usleep()的使用和区别
    linux inode已满解决方法
    Debian 系统修改语言设置成英文
    IIS设置问题
    Ajax实现跨域访问的三种方法
    HTML--备忘点
    C#基础---值类型和引用类型
    dapper.net框架使用随笔
    WebService的搭建,部署,简单应用和实体类结合使用
  • 原文地址:https://www.cnblogs.com/andy-wcl/p/3622482.html
Copyright © 2011-2022 走看看