我有以下JQuery允許用戶選擇/取消選擇項目/價格列表作爲創建自動報價的一種方式。代碼如下所示:JQuery函數提供舊數據
$('table.products > tbody > tr').click(function(){
if ($(this).find('div.price').is(":visible")) {
$(this).find('div.price, img.selected').fadeOut(100);
} else {
$(this).siblings('div.price, img.selected').fadeIn(100);
}
recalc();
});
它實際上比這更復雜(因此我之所以沒有使用toggle()
但上面的是這個問題的目的,只是一個簡單的例子
反正。上面的代碼工作正常如果表格行被點擊,然後價格和圖像被選中/取消選擇取決於他們是否價格已經顯示或沒有
然後我有一個函數調用recalc();
在結束..它看起來像這樣(再次,這是一個簡化版本):
function recalc() {
var numOfProducts = $('table.products div.price:visible').length;
alert(numOfProducts);
}
我有這裏的問題是,警報總是返回那會是什麼正確的變更前的值。
例如,如果沒有div.price
可見的,我選擇一個,一個將成爲可見的,但該警報顯示0
。然後,如果我選擇另一個,這使得2可見,但警報僅顯示1
,因爲這是我點擊時的情況。如果我然後單擊我已經點擊的項目之一以取消選擇它,它將顯示2
所以,我的問題是我應該如何確保函數調用在所有其他操作完成後發生?
將它們更改爲顯示/隱藏似乎沒有任何區別。將recalc()添加到每個淡入淡出的回調函數中,但會爲if語句的第一部分(select)生成警報3次,然後爲第二部分(取消選擇)生成6次警報。 – Joseph
多次顯示alter的原因是因爲指定了多個選擇器。將'recal'放在淡出回調中會導致每個選擇器觸發回調。無論如何,它不適用於第二次錄製,因爲它會導致太多的視覺混淆。但是,在淡入淡出命令後,將第6行上的recal移動到下一行似乎可行,但recal代碼仍然會執行多次。 – Joseph