我已经看到了很多的jQuery的这样的代码,不用说,我不喜欢它:jQuery的事件绑定和处理
<div id="myDiv">
<a class="clickable" href="#">Click Me</a>
<a class="clickable" href="#">Click Me</a>
<a class="clickable" href="#">Click Me</a>
<a class="clickable" href="#">Click Me</a>
</div>
<script>
$(document).ready(function(){
$('clickable').click(function(){
// Do some stuff...
});
});
</script>
我认识的人都在做这个,因为上述事件绑定和处理要求html结构在页面上可用,但它会导致在整个网站视图中混合呈现,逻辑和配置。另外,它使得用几乎所有调试器调试逻辑非常困难。
所以,我已经开始编码这样的,在一个单独的js文件(fiddle here):
// BEGIN: Event Handlers
var onLoad = function(){
$('.clickable').data('clicked', false);
};
var onMyDivClick = function(){
var clicked = $(this).data('clicked');
if (clicked) {
$(this).trigger('myCustomEvent');
} else {
alert('you clicked me');
$(this).data('clicked', true);
}
};
var onMyCustomEvent = function(){
$(this).css('color', 'dimGray');
alert('please don\'t click me again');
};
// END: Event Handlers
// BEGIN: Event Binding
$(window).on('load', onLoad);
$(document).on('click', '.clickable', onMyDivClick);
$(document).on('myCustomEvent', '.clickable', onMyCustomEvent);
// END: Event Binding
现在,我并不需要关心的结构是页面上。我不需要将所有内容都包裹起来$(document).ready(function(){});
而且我不需要关心结构是否要加载ajax。
问题1 方法有什么不足吗?到目前为止,我还没有找到任何。但在重构我们网站上的大部分代码之前,我想知道可能的注意事项。
问题2 这种方法如何进一步采用最新的jQuery功能?
因此,除了onLoad之外,在onLoad中移动事件处理的其余部分并将它们尽可能贴近目标:http://jsfiddle.net/codepic/8pE6z/2/ 但是,这相当有效地破坏了使用ajax加载控件的事件处理。也许我需要在加载“控件”时触发自定义事件。像这样:http://jsfiddle.net/codepic/8pE6z/3/这样,文档元素上只会有一个事件处理程序,它会查找.control,并将事件的其余部分绑定到更接近目标的位置。 – 2013-02-28 06:41:14