これを完全に説明する方法がわかりませんが、これが意味をなされることを願っています。AJAXで関数を呼び出す
私は、バスケットの合計額が特定の閾値内にある場合、無料配送の対象となるために費やす残額を計算する機能を持っています。
商品がバスケットに追加されるたびに、バスケット値がAJAXで更新されます。
AJAX生成モーダルには、バスケットに追加ボタンが表示されます。
AJAXで生成されたAJAX生成のバスケットボタンがクリックされたときに、製品がバスケットに追加されるたびに呼び出される必要があります。私はこれですべてを以下のようにしようとしていますが、正しく動作していないようです。問題の1つは、バスケットに追加ボタンがクリックされたときにイベントが複数回発生し、イベント後にバスケット合計が更新され、合計が正しく計算されないということです。
誰も私がこれをすべて整理する方法を説明できますか?
function totalBag() {
var standardDeliveryLow = 49.99;
var standardDeliveryHigh = 64.99;
var expressDeliveryLow = 65.00;
var expressDeliveryHigh = 99.99;
var bagValue = $('#basket-value').text();
var bagTotal = Number(bagValue.replace(/[^0-9\.-]+/g,""));
if (bagTotal >= standardDeliveryLow && bagTotal <= standardDeliveryHigh) {
var standardDifference = parseFloat(Math.round((standardDeliveryHigh - bagTotal) * 100)/100).toFixed(2);
$('<div class="delivery-message"><p>£'+ standardDifference +' from standar delivery</p></div>').insertAfter('.breadcrumbs');
} else if (bagTotal >= expressDeliveryLow && bagTotal <= expressDeliveryHigh) {
var expressDifference = parseFloat(Math.round((expressDeliveryHigh - bagTotal) * 100)/100).toFixed(2);
$('<div class="delivery-message"><p>£'+ expressDifference + ' from express delivery</p></div>').insertAfter('.breadcrumbs');
} else {
return false;
}
}
$(document).on('ajaxSuccess', function(e) {
$('[name="AddItemToBasket"]').on('click', function() {
$('body').bind('ajaxSuccess.custom', function() {
totalBag();
//alert('this works');
$(this).unbind('ajaxSuccess');
});
});
});
totalBag();
"問題の1つは、バスケットに追加ボタンをクリックしたときにイベントが複数回発生するということです。これは、 '$(document).on( 'click'、function(e){'は、ページ上で誰かがクリックするたびに、そのコードを再度実行してAddItemToBasket要素に別の "click"イベントハンドラを追加することを意味するからです。あなたが注意していない場合、あなたは数十人のハンドラを持つことができます。要素にイベントハンドラを設定しても、それ以前に定義されたイベントハンドラは削除されません。 DOMのロード時に一度このコードを実行すると、? – ADyson
また、.bind()はjQuery 1.7で数年前に使用されていた.on()で置き換えられました。 3.0。それを使用する正当な理由はありません。実際にはhttp://api.jquery.com/bind/ – ADyson
それはドキュメントの準備ができていますが、私はそれを含めませんでしたが、混乱の謝罪 –