jQuery事件在警报后停止工作

时间:2013-08-07 16:34:39

标签: jquery click

我有一个jQuery事件,在调用警报之前工作正常。该函数调用服务器上的脚本,该脚本将一个项目(在数据库中插入一行)添加到购物车。购物车中只允许有八个商品,因此当用户尝试添加第九个商品时,会向jQuery脚本返回一条不允许的消息。这是jQuery脚本:

jQuery(document).on('click', 'a.add.module, a.remove.module', function(e) {

    if (blnProcessing == true) {
        return false;
    } else {
        blnProcessing = true;
    }

    e.preventDefault();
    objLink = jQuery(this);
    strLink = objLink.attr('href');

    if (objLink.hasClass('add')) {
        objLink.text('Adding');
    } else {
        objLink.text('Wait');
    }

    jQuery.get(strLink, function(data) {
        if (data.success) {
            if (data.success != true) {
                alert(data.success);  // message that says this is not allowed -- this part stops the script from functioning further
            } else {
                // this part works
                jQuery('#cart').load('/study-clubs/modules/cart', function(){
                    if (objLink.hasClass('add')) {
                        strNewLink = strLink.replace('add', 'remove');
                        objLink.attr('href', strNewLink);
                        objLink.removeClass('add').addClass('remove').text('Added');
                    } else if (objLink.hasClass('remove')) {
                        strNewLink = strLink.replace('remove', 'add');
                        objLink.attr('href', strNewLink);
                            objLink.removeClass('remove').addClass('add').text('Add');
                    }

                    blnProcessing = false;

                });
            }
        } else {
            alert(data.error);
            blnProcessing = false;
        }
    }, 'json');
});

通常,通过这种行为,您可以使用$(document).on('click', '#someID', function() ...。但我已经在使用它了。所以我需要重新附加事件监听器或其他东西。如何在警报后让它工作?

1 个答案:

答案 0 :(得分:2)

如果data.success包含在布尔上下文中计算结果为true但不等于true的值(执行包含alert(data.success)的块),则blnProcessing标志永远不会重置。

FWIW,我意识到它有时需要额外的一双眼睛,但你真的应该能够通过在Firebug(或其他一组开发人员工具)中逐步执行代码来解决这个问题。