我正在尝试将单击处理程序绑定到 DOM 上的多个元素。单击后,该元素会在阴影框中加载一些新内容。在玩了一会儿代码后,我注意到每次单击时加载时间越来越长。
我通过禁用除了简单的 console.log 之外的所有点击处理程序的功能来测试这一点。即使在此之后,到第 15 次单击时,响应也变得越来越慢。我点击了哪个帖子都没有关系,或者即使内容已经加载了——在第 15 次点击这个“.shadowbox-link”元素时它真的开始变慢了。
这是我的点击处理程序:
$j('#content article .shadowbox-link').bind('click', showShadowboxPost);
哪个功能:
var showShadowboxPost = function() {
// Unbind click handler
$j(this).unbind('click', showShadowboxPost);
// Variables for ajax request
var postData = {
'postId': $j(this).attr('data-id'),
'postType': $j(this).attr('data-type'),
'elementId': $j(this).attr('id'),
'prevPost': $j(this).prev().attr('id'),
'nextPost': $j(this).next().attr('id')
};
preFadeIn();
// If content already loaded, avoid ajax request
// The following functions include the fadeIn
if($j(this).children('.single-post').length !== 0) {
preLoadedRequest(this)
} else {
ajaxRequest(postData, this)
}
// Rebind click handler
$j(this).bind('click', showShadowboxPost);
return false;
};
完整文件在这里:http ://www.clarkthomasny.com/wp-content/themes/cleanslate/js/shadowbox-post.js
HTML 基本上是这样的:
<div id="content">
<div id="articles">
<article class="shadowbox-link"></article>
<article class="shadowbox-link"></article>
<article class="shadowbox-link"></article>
[etc..]
</div>
</div>
这是它的页面:http: //www.clarkthomasny.com/
我尝试了几种不同的方式来调试它,但我仍然不确定发生了什么,并认为它一定与将点击处理程序绑定到这么多元素有关?我已经使用 jQuery 几年了,我很难过,请帮忙。谢谢!