╋艺 镇╋╋网站网络|程序语言|Flash╋┣◇网站建设&Web语言 → trigger()和triggerHandler()


  共有16914人关注过本帖树形打印复制链接

主题:trigger()和triggerHandler()

美女呀,离线,留言给我吧!
admin
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 司令 亲民勋章
等级:管理员 帖子:3027 积分:27515 威望:0 精华:7 注册:2003/12/30 16:34:32
trigger()和triggerHandler()  发帖心情 Post By:2011/1/10 17:16:55 [只看该作者]

年前一个项目做下来,全程js 交互写了我半辈子的js代码,重构了N便~~ 不过做项目这东西很锻炼人,强迫你去接触一些没有接触过的东西,收获还是蛮大的。其中收获最大的还是对jQuery 的全新认识了,之前接触jquery一直都是表现类的,如show,hide,hover,等方法,这次项目,接触了许多事件类代码。

trigger() 触发事件
这个方法是jQuery 1.3中新增的一个引起触发事件的函数。具体解释可以去这里下载 最新的jquery 手册查一下,里面解释的很清楚,就是字有点多。
如果你比较懒那么我稍微解释一下这个东东。我也是挂羊头卖狗肉 =,=
触发事件就是 类似于点击click, mouseover, keydown 等有动作的js事件,简单的说就是一个动作,可能有人会问,那show, hide 是不是? 不是,show 这 效果,手册里刚打开的速查页面里的事件类目就是上面所说的触发事件
说了这么多,还没切到主题,=,=我就这样 ,容易跑题,大伙看习惯了就好。

为什么要用 trigger() ?
比如:你给一个按钮添加了一个click点击事件,弹出提示框,代码如下。

var div = $("#mybutton"); //你的按钮。
div.click(function() {
    alert('让你点,你就点?');
});
上面的代码就是一个按钮的click事件。这个时候你有个非分的要求,就是希望页面刷新的时候就点一下这个按钮。如果不用trigger()你可以在后面这样写:

div.click();如果用trigger(),你就要写成这样:效果跟上面这句是一样,就是稍微长点。

div.trigger("click");然后有人说:上面这个短一点,你还教我用下面这个 =,=
表急着揍我么~· 继续往下看。

你用手册 里的索引搜一下click 可以看到 两条 结果 click() 和,click(fn),然后 搜一下trigger 发现只有一个 trigger(type, [data]) 。
然后你知道我的意思了吧。— trigger 可以传参数进去。
我们看看 手册里的trigger 例子:

$("p").click( function (event, a, b) {
  // 一个普通的点击事件时,a和b是undefined类型
  // 如果用下面的语句触发,那么a指向"foo",而b指向"bar"
} ).trigger("click", ["foo", "bar"]);了解了吧?如果用click 的话,它不吃参数,用trigger的话,就能吃了。
练习一下吧:黏贴到你的页面上试试看,记得把jquery载进来。

$(function() {
 var div = $("#mybutton"); //你的按钮。
 div.click(function(e,text) {
  var text = text || '~让你点,你就点?';
  alert(text);
 });
 div.trigger("click","您好,请点击按钮");
});
一篇说的trigger()触发事件的解释,因为写着写着 发现有点长,所以就拆成2篇,多牛逼~~~ 咩哈哈·~~这篇我介绍一下 trigger() & bind() 配合使用 的 隔山打牛招式,真的是隔山打牛,不是其他,表想歪。=,=bind() 绑定事件 if 你看过jquery里bind 绑定事件的解释,那基本不用看这篇文章了。 return falseelse go on称为绑定事件,字面意思应该是 绑定在其他事件上的事件。$(function() {
 var div = $("#mybutton"); //你的按钮。
 div.click(function(e,text) {
  var text = text || '~让你点,你就点?';
  alert(text);
 });

        div.bind('click', function() {
            alert("兄弟,没事不要乱点; ");
        });
});

上面的代码就是给div的click事件绑定了一个事件。猜猜看哪个先执行?当按钮被点击的时候,先执行完click事件后,再执行绑定的事件。
bind() 绑定 自定义事件
说绑定自定义事件的时候先说一下 什么是自定义事件?trigger()方法是用来触发一些事件型方法,如:
div.trigger('click', [text]);
上面的click 是不是一定要规定的 click,focus等事件型方法嘞?答案是可以触发任何事件。如:
div.trigger('my_action', [text]);
你可以尝试一下,发现firebug 没有报错,说明没有问题,只是这个my_action 事件什么都没做而已。为什么不报错,这个我还在研究,谁知道的告诉我 -,-从这一点看trigger 方法一定是在找 my_action 事件。突然有个idea,既然bind 是绑定事件,既然 my_action 事件什么事情都没做,那我就给它bind 绑定个事件上去不就可以了。于是乎····竟然可以~~
$(function() {
 var div = $("#mybutton"); //你的按钮。
 div.bind('my_action', function(e, text) {
            var text = text || ' oh yah, 测试功能';
            alert(text);
        });
 div.trigger('my_action');
});
隔山打牛
那么何为隔山打牛呢?听我慢慢说过来~~~比如我们有两个盒子,希望点击按钮让 第二个盒子显示第一个盒子里的内容。平常我们会这样写:
$(function() {
 var div = $("#mybutton"); //你的按钮。
 var box1= $("#mybox1");
 var box2= $("#mybox2");
 div.click(function() {
             var text = box2.val();
             box1.val(text);
        });
});
利用bind 和 trigger 我们可以这样写。
$(function() {
 var div = $("#mybutton"); //你的按钮。
 var box1= $("#mybox1");
 var box2= $("#mybox2");

 div.bind('my_action', function(e, text) {
             var text = box1.val();
             box2.val(text);
        });

 div.click(function() {
     $(this).trigger('my_action');
        });

});
这样写的好处,在以后会慢慢体现,比如你想双击的时候也想 有这样的动作的时候 :只需要在后面加:
 div.dblclick(function() {
     $(this).trigger('my_action');
        });
甚至你想在点击后想把第一个盒子消失,只需要在后面再加上
 div.bind('my_action', function(e, text) {
             box1.hide();
        });
这样的好处是,当click事件要处理的事情变多的时候,能将处理的事情进行分类,让代码更加有层次。而不是臃肿的click function。更神奇的是这样写 bind 事件甚至可以分开存在不同的js 文件 在需要的时候调用,让它变成一个组件形式。是不是有一种隔山打牛的感觉?


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/houhuizhe/archive/2010/06/29/5701690.aspx



  
“艺镇”官方站:www.zyzsky.com QQ群:1221854  回到顶部