0

以下に示すように、製品をカートに追加する関数を遅らせるコールバック関数を作成しました。

productAddToCartForm.submit(this)呼び出しがまだ早すぎます。promise 関数も試しました (ただし、ここで適用できるかどうかはわかりません)。

コールバック関数は、投稿が必要な変数を隠し入力に追加します。add to cart 関数は、追加される前に呼び出されています。

現在機能しているのはタイムアウト機能だけですが、それはしたくありません。

Console.logタイトルは 1-4 ARE ログです。何か案は?

updatePrices(IDs, function () {
    //setInterval(function(){productAddToCartForm.submit(this)},2000);
    console.log("3. finished function and returned");
    $j("input").promise().done(function () {
        console.log("4.Finished! ");
        productAddToCartForm.submit(this);
    });
});

function updatePrices(IDs, callback) {
    console.log("1. entering update Prices function");
    //... A BUNCH OF N/A CODE, ASSUME BASEPRICE 2.50
    if (IDs.length == 1) {
        console.log("2. IDs equals one");
        $j('.priceBlock input').remove();
        $j('.details' + IDs[i] + ' .priceBlock').append('<input type="hidden" name="customPrice" value="' + basePrice + '"/>');
        //return;
    }
    if (callback) {
        callback();
    }
}
4

1 に答える 1

0

要素が DOM に追加されていても、コールバック関数が呼び出されるまでにフォームはまだ更新されていないようです。

あなたはそれを使用したくないと述べましたが、再現可能なフィドルがなければ、私は提案することしかできませんsetTimeout():

if (callback) {
    setTimeout(callback, 1);
}

これにより、一時的にブラウザに制御が渡されるため、ブラウザは内部的な簿記を行うことができます。これは (残念ながら) この種の問題に対する実証済みの方法です。

于 2013-06-18T02:17:07.747 に答える