2013-07-03 138 views
1

我有一個選擇字段供用戶添加一個T恤到他們的訂單。該方案是這樣的:jQuery選擇onchange如果不是選項

  • 沒有T恤(value="no"
  • 小(value="S"
  • 中(value="M") ...等。

目前,我有我的JS設置爲:

$("select[name='tshirtsize']").change(function(){ 
    if($(this).val() == "no"){ 
     // subtract $15 from subtotal 
    } else { 
     // add $15 to subtotal 
    } 
}); 

然而,如果用戶選擇一個襯衫的尺寸,然後轉換到不同的襯衫尺寸,它似乎另一個襯衫添加到他們的購物車,而不是取代第一個。這是有道理的,因爲它應該這樣操作;但是,我不希望它。

我想要做的只是如果他們從value="no"更改爲value="shirt-size-here",而不是襯衫尺寸之間,則僅向用戶小計添加15美元。

想法?

回答

1

只要有,如果你已經上沒有

var none_selected = true; //change this based on whatever the default is 
$("select[name='tshirtsize']").change(function(){ 
    if($(this).val() == "no"){ 
     // subtract $15 from subtotal 
     none_selected = true; 
    } else if (none_selected) { 
     // add $15 to subtotal 
     none_selected = false; 
    } 
}); 
0

您可以添加一個變量來存儲選擇的選擇是這樣定義變量:

tmpSelection = "no"; 
$("select[name='tshirtsize']").change(function(){ 
    if($(this).val() == "no"){ 
     // subtract $15 from subtotal 
    } 
    else if(tmpSelection != "no" && $(this).val() != "no") { 
    // add $15 to subtotal 
    } 
    tmpSelection = $(this).val(); 
}); 
0
var base_price = X; 
$("select[name='tshirtsize']").change(function(){ 
    if($(this).val() != "no"){ 
     var new_price = base_price + Y; 
     // update price to show user. 
    } 
}); 
0

以最簡單的解決方案我似乎是在click事件之外存儲一個hasTShirt布爾值。另一種辦法是看抓在selector.select()事件選擇的前值,但它只會涉及到存儲相同的數據量...

例子:

var hasTshirt = 0; //0 = false, 1 = true  
    $("select[name='tshirtsize']").change(function(){ 
    if($(this).val() == "no" && hasTshirt == 1){ 
     hasTshirt = 0; 
     // subtract $15 from subtotal 
    } else if (hasTshirt == 0){ 
     hasTshirt = 1; 
     // add $15 to subtotal 
    } 
}); 
0

你我們希望創建一個特定於本產品價格的變量,而不管變化(尺寸/顏色等)如何。

不是直接操縱總量,而是操縱特定產品的價格,然後將其與總量相加。

$("select[name='tshirtsize']").change(function(){ 

    var price; 

    if($(this).val() == "no"){ 
     shirtPrice = 0; 
    } else { 
     shirtPrice = 15; 
    } 

    var total = getTotal(); // Define these yourself 
    setTotal(shirtPrice); // Define these yourself 

});