2013-11-20 57 views
1

我有這個購物車腳本,我正在嘗試修改。麻煩的是,每當我嘗試刪除購物車中的多個商品時,我都會得到一個負值。當所有項目被刪除時,購物車永遠不會歸零。我可以添加項目罰款。Javascript:從購物車中減去商品的結果爲負值

Here is the fiddle.

下面是此功能的代碼段。完整的代碼在小提琴中,因爲通過向您展示我遇到的問題的示例更容易解釋。

function addToCart(id, container_id, corTitle, corPrice, credit_hrs) { 
    var amount = parseFloat(corPrice); 
    var hours = parseFloat(credit_hrs); 
    var remove = "<button type=\"button\" class=\"remove\"></button>"; 
    var selected_product = "<div class=\"item \">" 
      + "<div class=\"title\">" 
      +"<div class=\"remove\"><button type=\"button\" title=\"remove from cart\" class=\"remove-from-cart\" alt=\"Remove Course\" ></button></div>"    
      + corTitle 
      + " for $" + corPrice 
      + "</div>"    
      + "<input name=\"containerId\" value=\"" + container_id 
      + "\" type=\"hidden\">" + "</div>"; 
    $(selected_product).insertBefore("#subtotals"); 

    register("add", amount, hours); 
    $(".remove-from-cart").click(function() { 

     $(this).parents(".item").slideUp("slow"); 
     console.log(this); 
     register("subtract", amount, hours); 
     $(toId(id)).removeAttr("disabled").fadeTo("slow", 1); 
     $(this).parents(".item").remove(); 
    }); 
} 

這個問題似乎是附着在刪除按鈕的click處理程序被調用多次被點擊刪除按鈕時。重複調用register("subtract", amount, hours)會導致總數變爲負值。我怎樣才能解決這個問題?

+0

凡大部作用域? – Maess

回答

2

的問題是,你重新運行$(".remove-from-cart").click(...)每次添加一個項目到車時間,所以所有現有的刪除按鈕得到額外的處理程序。

使用jQuery將HTML解析爲jQuery封裝的DOM結構,然後將其用作.remove-from-cart選擇器的上下文(如this working fiddle中所示)。這樣,.remove-from-cart選擇器將只適用於您新添加的項目。

var selected_product = "<div class=\"item \">" + ...; 

// jQuery-wrapped DOM structure 
var $prod = $(selected_product) 

$prod.insertBefore("#subtotals"); 
register("add", amount, hours); 

// use $prod as jQuery context argument, 
// so `.remove-from-cart` only looks in this DOM tree 
$(".remove-from-cart", $prod).click(function() {  
    ... 
}); 
+0

apsillers,非常感謝!這正是發生了什麼,但我無法弄清楚如何解釋或解決問題。我試圖使用Chrome開發工具進行調試,但無法弄清楚如何進入代碼。你用調試器來解決這個問題嗎?如果是這樣,你介意告訴我你使用了什麼?我真的很想了解如何調試我的javascript/jQuery。 – Chris22

+1

我手動調試它:我首先在'register'內部放置了一個'console.log(arguments)',看到單擊是造成多次減法。由於代碼只有一個調用'register(「subtract」,...)',我知道'click'處理程序必須每次點擊多次觸發。因此,點擊處理程序必須多次綁定到每個按鈕。最終,我能夠很快解決這個問題,因爲我過去看到過類似的問題(有時是由我自己造成的),而不是熟練地使用調試工具。對不起,這不是太有幫助! – apsillers

+0

apsillers,謝謝!你的回答不僅僅是有用的,我感謝你花時間來解釋!我把你的評論投給你!我在我的代碼中記錄了錯誤的地方,我沒有想到查看刪除'click'函數,即使這正是錯誤發生的地方!再次感謝您的解決方案! – Chris22

相關問題