我见过很多这样的 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 文件上编码(这里是小提琴):
// 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 功能进一步采用这种方法?