2015-09-16 63 views
2

我試圖根據選定的日期和時間更新機票價格,其中某些日期會打折,而其他日期則不打折。折扣價格的計算沒有顯示爲jQuery中的數字?

至於門票的定價而言,我一直在使用HTML來存儲和處理的值,就像這樣:

<tr> 
    <td>Adult</td> 
     <td> 
      <select class="qty" name="SA"> 
       <option value="0">0</option> 
       <option value="1">1</option> 
       <option value="2">2</option> 
       <option value="3">3</option> 
       <option value="4">4</option> 
       <option value="5">5</option> 
       <option value="6">6</option> 
       <option value="7">7</option> 
       <option value="8">8</option> 
       <option value="9">9</option> 
       <option value="10">10</option> 
      </select> 
     </td> 
     <td> 
      <input type="text" value="18.00" class="price" readonly> 
     </td> 
     <td align="center"> 
      <span class="amount">$0.00</span> 
     </td> 
    </tr> 

它是如何工作

  • 數量value是根據用戶選擇的下拉選項來選擇的。
  • 量值然後由價格,這被存儲在value<input> HTML相乘,在這種情況下,它18.

  • <span>然後用結果更新,示出了子總價格。

  • 注:我的<tr>多個多個部分相同的那些用於計算的這一個

JS/jquery的

//price of seating 
function calculatePrice() { 

    var time = $("#whichSession").val(); // sets time to value 
    var day = $("#whichDay").val(); // sets day to value 

    var sum = 0; 

    $('#bookingTable > tbody > tr').each(function() { 
     var qty = $(this).find('option:selected').val(); 
     var price = $(this).find('.price').val(); 
     var amount = (qty * price) 
     sum += amount; 
     $(this).find('.amount').text('$' + amount.toFixed(2)); 
    }); 
    //just update the total to sum 
    $('#totalprice').val(sum.toFixed(2)); 
} 

其他用戶已建議我創建一個新的功能即實時更新價格的value,以便它可以獲得適當的折扣價值。用於計算折扣價格

// calls get price function on day change 
$('.qty').change(function() { 
    getPrices(); 
}); 

// sets value of price based on day and time 
function getPrices (day, time) { 
    if (day=='mon' || day == 'tue' || time=='1pm') { 
    prices = {SA:12, SP:10, SC:8, FA:25, FC:20, B1:20, B2:20, B3:20} 
    } else { 
    prices = {SA:18, SP:15, SC:12, FA:30, FC:25, B1:30, B2:30, B3:30} 
    } 
    return prices; 
} 

我的問題

JS/jQuery的

當我使用alert顯示什麼珍惜它實際上改變它,這似乎是正確的。但是,它在span中打印爲'$ NaN',這意味着顯示每張票的小計金額。

JSFiddle

我已經創建了一個小提琴所以你們可以看到整個事情是如何工作的。請原諒,如果任何代碼是狡猾的。它實際上在我的網站上時效果更好。

對不起,很長的文章。我只是想確保我對我的問題非常清楚。請讓我知道如果有什麼不清楚,我會盡力澄清。

在此先感謝!

回答

1

似乎需要使用特定的人員類型來訪問正確的價格。 您可能需要讀取它的值,如下圖所示:

$('#bookingTable > tbody > tr').each(function() { 
    var type= $(this).find('select:first').attr('name'); 
    var qty = $(this).find('option:selected').val(); 
    var amount = (qty * price[type]) 
    sum += amount; 

    $(this).find('.amount').text('$' + amount.toFixed(2)); 
}); 
+0

它似乎沒有工作。我需要做的是根據getPrices函數中的條件獲取每個價格的值。 – antonlab

+0

請檢查此[小提琴](http://jsfiddle.net/8xrj7jof/5/)。你的意思是更新'$('#whichDay')。change(..)'顯示的價格嗎? – MaxZoom

+0

Nono。更新''的值。因爲我原來的價格計算是'數量*價格','價格'是以這個數值爲基礎的。如果我可以得到更新的價值,那麼它會顯示正確的價格(您更新的小提琴計算正確的價格,但沒有顯示它)並計算它正確。 – antonlab

2

的問題是,你的函數getPrices()返回一個JavaScript對象,而不是一個數字。

所以,如果你這樣做:的

var amount = (qty * prices.SP); 

代替:

var amount = (qty * price); 

你的量是一個數字,你可以在上面做數學運算

+0

問題是,它並不總是'SP'。它返回的對象基本上取決於用戶選擇的內容。會不會像'price.prices'工作? – antonlab

+0

對不起,我的意思是,它意味着根據所選日期/時間更改所有票的價格。如果我執行'價格.SP',它將把票據的所有價格僅改變爲該數量。 – antonlab

+0

您可能只需要爲函數getPrices(day,time,userSelection)添加第三個參數,那麼此函數可以僅返回單個價格而不是整個對象。 – ThiagoPXP

0

一個可能的解決方案是保存在變量中進行初始選擇,然後使用$ .each遍歷價格,這是問題(它是一個對象)。這是從你的JSFiddle修改後的代碼:

var subTotals = $('#bookingTable > tbody > tr'); 
var index = 0; 
$.each(prices,function (key,value) { 
    var qty = subTotals.eq(index).find('option:selected').val(); 
    var amount = (qty * value) 

    alert(amount); 
    sum += amount; 

    subTotals.eq(index++).find('.amount').text('$' + amount.toFixed(2)); 
}); 

希望得到這個幫助。