0

私は私を殺している問題を抱えています。これが私のコードです:

$('.somediv.btn-2').live('click', function() {
    if (addToCart()) {
        var container = $(this).parent();
        container.hide();
        container.next().show();
    }
});

function addToCart() {
    // ...
    return true
}

何らかの理由で、コンテナーが非表示になることはありません。

せずに隠すだけif()でも機能しますが。この関数は AJAX 呼び出しを行いtrue、成功すると戻ります。呼び出しを見ると、成功を返すため、true を返す必要があります。

本当にありがとう。

編集: console.log(addToCart()) でコンソールを調べてみましたが、未定義と表示されます

4

3 に答える 3

4

非同期の AJAX 呼び出しが成功したときに、関数が同期的に true を返すことはできません。

このように ajax 成功関数としてコールバックを渡します

success: function () {
    var container = $(this).parent();
    container.hide();
    container.next().show();
}
于 2012-05-21T14:35:03.187 に答える
2

関数は非同期であるためaddToCart()、戻り値の代わりにコールバックを使用する必要があります。コードは次のようになります。

$('.somediv.btn-2').live('click', function() {
    addToCart(function() {
        var container = $(this).parent();
        container.hide();
        container.next().show();
    });
});

function addToCart(successCallback) {
    // instead of return true you'd have
    successCallback();
}
于 2012-05-21T14:37:18.470 に答える
1

addToCart の ajax 呼び出しが成功したときに呼び出すコールバック メソッドとして、「if」ブロックの内容を送信するだけではどうですか?

したがって、コードは次のようになります。

$('.somediv').live('click', function() {
   $.ajax({
        .
        .
        success: function() {
              var container = $(this).parent();
               .
               .
         }
    });
  });
于 2012-05-21T14:36:09.087 に答える