我正在创建幻灯片,当我到达lis的末尾并单击向右箭头时,ajax应该触发并加载新的图像列表。当我到达第二个列表的末尾时,ajax应该触发agaiin。如果我点击两次快速ajax两次触发并更改我需要的全局变量,而不是仅激活一次。我可以在其他之后隐藏按钮,以便在ajax成功再次显示按钮之前无法按两次。按钮只是一个div。我不想隐藏它,因为它隐藏了一秒钟,我希望它可见。如果我尝试解除rightNav之后的其他问题,我无法再将其绑定回ajax成功。 可能是什么问题?
rightNav.click( function(){
if(index <= listLength - 2){
index = index + 1;
appendImage(index);
}
else {
rightNav.unbind('click');
nextUrl = '/GetPhotosCriterians?categoryid=' + pCategoryId + '&styleid=' + pStyleId + '&terms=' + pTerms + '&pos=' + nextPos;
$.ajax({
type: "GET",
url: nextUrl,
dataType:"json",
success: function(data){
imagesList = data;
listLength = imagesList.length;
appendImage(0);
curentPos = nextPos;
nextPos = nextPos + imgNumber;
prevPos = curentPos - imgNumber;
rightNav.bind('click');
}
});
}
});
答案 0 :(得分:1)
您的代码无效,因为rightNav.bind('click');
实际上并未将click
事件绑定到您的函数。
bind
(在您的情况下)的语法是bind(event, callback)
。
所以你可以:
a)为您的功能命名,以便您可以将其分配回来,例如:
var f = function() { if(index <= listLength - 2){ ...
rightNav.click(f);
然后将其分配给:
rightNav.bind('click', f);
b)当ajax已加载时忽略单击:
else {
//rightNav.unbind('click');
if (rightNav.loading) {
return;
}
rightNav.loading = true;
...
success: function(data){
rightNav.loading = false;
...