jquery unbind并绑定ajax成功

时间:2014-02-21 22:45:26

标签: jquery ajax bind unbind

我正在创建幻灯片,当我到达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');
            }
        });
    }
});

1 个答案:

答案 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;
        ...