JQuery最佳实践-精妙的自定义事件

上次发了文,

JQuery最佳实践-JQuery自定义事件的应用

关于JQuery自定义事件,不少同学曾发邮件问究竟日常JS应用中会不会用到,以及具体例子云云。。。

恰好最近负责的一个可视化编辑器的开发,其中有些地方便应用了JQuery的自定义事件,而且达到了很好的效果-精简代码的同时充分利用了OO的原则。

本文以实际应用开发过程中遇到的一个例子进一步说明“什么时候用JQuery的自定义事件以及怎么用”,希望可以抛砖引玉,同时权且当是回复同学们的邮件了。

 

 

/*
补充说明下:这篇文章仅说明自定义事件的一个较为特殊的用处(不代表自定义事件的典型应用):
伪装原生的dom事件,以便达到不触发原生的事件而执行了原生事件的处理逻辑”。
至于实际是否可取,我已经向jquery社区投递email问那里JS大牛的看法,有结果后我会在这里回复下大家。
*/

 

 

问题

一个复选框X,你如何便捷地触发它的click事件的处理逻辑,但是又不改变它当前的选中状态?

答案

其实没有什么标准答案,用传统的方式,写一个函数

 

var onClick=function(dom){
//复选框x的click事件的处理逻辑
};

 

 

当仅仅需要执行处理逻辑而不改变复选框的状态时,

 

onClick(X);//X引用复选框

为了响应用户直接点击复选框,你还需要为复选框X添加相应的click处理函数,

 

 

$(X).click(function(evt){
//执行处理逻辑
onClick(this);
});

 

 

但是,要说的是,这里可以利用自定义事件处理函数封装复选框click事件的处理逻辑!然后触发该自定义事件。而且个人觉得具有必要性和优点:

1,onClick的逻辑是属于复选框自身的,没有必要用一个全局方法来定义并剥离复选框对象

从面向对象的角度说,对象由属性和行为(方法)构成,所以onClick的逻辑可以封装在复选框的作用域(context)内。

2,充分利用匿名函数,减少全局变量或者函数的数量,有利于提高脚本的执行效率

....

代码示例

1,首先定义一个变量$x引用缓存我们的复选框对象。这点非常重要但很多js开发员没有意识到:每调用一次jquery的$方法选中某个元素=遍历一次html dom树。所以要学会利用js变量缓存对象~

var $x=$(X);
2,定义一个自定义事件evtClick,封装处理逻辑

$x.bind("evtClick",function(evt){
//onClick的处理逻辑
});
3,当要执行处理逻辑又不想改变复选框的选中状态时,利用trigger方法触发evtClick事件
$x.trigger("evtClick");
4,click事件

 

$x.click(function(evt){
$x.trigger(
"evtClick");
});

 

 

Demo!

以下应用场景你曾经遇到过么?

需求:某个容器A,用户可以设置它的4条边框的有无以及边框色?“边框的有无”和“颜色的变化”需要联动,
就是说改变边框的时候获取当前设定的颜色,改变颜色的时候获取当前设定的边框,并及时反映到容器A上。

注:本例子边框颜色统一设置,分别设置的例子大家可以去写下~

示例请点击上面链接,同时欢迎大家光顾我的博客-漫波网络电台,一个脱离开发工作的音乐分享世界。

posted @ 2010-08-11 19:26  Mamboer  阅读(4138)  评论(6编辑  收藏  举报