0

アラートが呼び出されるまで正常に動作する jQuery イベントがあります。この関数は、カートにアイテムを追加する (データベースに行を挿入する) スクリプトをサーバー上で呼び出します。カートには 8 個のアイテムしか入れられないため、ユーザーが 9 番目のアイテムを追加しようとすると、それは許可されていないというメッセージが 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() ...。しかし、私はすでにそれを使用しています。イベントリスナーなどを再アタッチする必要がありますか。アラートの後にこれを機能させるにはどうすればよいですか?

4

1 に答える 1

2

data.successブール値のコンテキストで true と評価されるが等しくない値が含まれている場合(つまり、含まれてtrueいるブロックalert(data.success)が実行されるため)、blnProcessingフラグはリセットされません。

FWIW、時には余分な目が必要になることもありますが、Firebug (または別の開発者ツールのセット) でコードをステップ実行することで、これを理解できたはずです。

于 2013-08-07T16:41:24.277 に答える