2017-01-03 11 views
0

hereのような練習をしようとしています。 <option>は部屋の数量を表し、テキストはその価格を表します。私がやりたいことは、以前に別の値を選択したとしても値を選択すると、コードは値を更新して価格を計算する必要があります。同じことも取り除くことです。複数のドロップダウンから値と価格を追加、削除、計算

どのようにして値を削除し、すべての選択を再計算しなければならない価格に変更に

https://jsfiddle.net/nsp0u703/

function update(_this) { 
 
\t document.getElementById("booking_summary").style.display = "block"; 
 
\t 
 
\t var textStr = _this.options[_this.selectedIndex].text; 
 
\t var startPos = textStr.indexOf("(") + 1; 
 
\t var endPos = textStr.indexOf(')',startPos); 
 
\t var priceWCurrency = textStr.substring(startPos, endPos); 
 
\t 
 
\t var setShowQuantity = document.querySelector("#booking_summary .squantity"); 
 
\t setShowQuantity.innerHTML = _this.options[_this.selectedIndex].value; 
 
\t 
 
\t var roomSelectedText = document.querySelector("#booking_summary .rooms-count"); 
 
\t var totalPrice = document.getElementById("total_price"); 
 
\t 
 
\t var checkQuantity = setShowQuantity.innerHTML; 
 
\t if(checkQuantity == 0) { 
 
\t \t checkQuantity.innerHTML = ""; 
 
\t \t roomSelectedText.innerHTML = ""; 
 
\t \t totalPrice.innerHTML = ""; 
 
\t \t return; 
 
\t } else { 
 
\t \t if(checkQuantity == 1 && checkQuantity != 0) { 
 
\t \t \t roomSelectedText.innerHTML = "room for"; 
 
\t \t } 
 
\t \t if(checkQuantity > 1) { 
 
\t \t \t roomSelectedText.innerHTML = "rooms selected"; 
 
\t \t } 
 
\t \t totalPrice.innerHTML = priceWCurrency; 
 
\t } 
 
}
<!-- first dropdown menu --> 
 
<select onchange="update(this)"> 
 
    <option value="0">0</option> 
 
    <option value="1">1 (BAM 99)</option> 
 
    <option value="2">2 (BAM 198)</option> 
 
    <option value="3">3 (BAM 297)</option> 
 
    <option value="4">4 (BAM 396)</option> 
 
    <option value="5">5 (BAM 495)</option> 
 
</select> 
 
<br /> 
 
<!-- second dropdown menu --> 
 
<select onchange="update(this)"> 
 
    <option value="0">0</option> 
 
    <option value="1">1 (BAM 99)</option> 
 
    <option value="2">2 (BAM 198)</option> 
 
    <option value="3">3 (BAM 297)</option> 
 
    <option value="4">4 (BAM 396)</option> 
 
    <option value="5">5 (BAM 495)</option> 
 
</select> 
 
<br /> 
 
<!-- third dropdown menu --> 
 
<select onchange="update(this)"> 
 
    <option value="0">0</option> 
 
    <option value="1">1 (BAM 99)</option> 
 
    <option value="2">2 (BAM 198)</option> 
 
    <option value="3">3 (BAM 297)</option> 
 
    <option value="4">4 (BAM 396)</option> 
 
    <option value="5">5 (BAM 495)</option> 
 
</select> 
 
<br /> 
 
<!-- fourth dropdown menu --> 
 
<select onchange="update(this)"> 
 
    <option value="0">0</option> 
 
    <option value="1">1 (BAM 99)</option> 
 
    <option value="2">2 (BAM 198)</option> 
 
    <option value="3">3 (BAM 297)</option> 
 
    <option value="4">4 (BAM 396)</option> 
 
    <option value="5">5 (BAM 495)</option> 
 
</select> 
 
<!-- display --> 
 
    <div id="booking_summary"> 
 
     <strong class="squantity"></strong> 
 
     <span class="rooms-count"></span> <br /> 
 
     <span id="total_price" class="total-price"></span> 
 
    </div>

答えて

1

を計算し、追加することができます。私は、データ抽出の軽減のために、いくつかのクラスと属性を追加しました:<form>

function update() { 
 
    var selects = document.querySelectorAll(".rooms"); 
 
    var roomsCount = 0; 
 
    var priceTotal = 0; 
 
    selects.forEach(function(select) { 
 
    var roomsOfType = select.options[select.selectedIndex].value; 
 
    if(roomsOfType != 0) { 
 
     roomsCount += parseInt(roomsOfType); 
 
     priceTotal += parseFloat(select.options[select.selectedIndex].getAttribute("data-price")); 
 
    } 
 
    }); 
 
    var setShowQuantity = document.querySelector("#booking_summary .squantity"); 
 
    var roomSelectedText = document.querySelector("#booking_summary .rooms-count"); 
 
    var totalPrice = document.getElementById("total_price"); 
 
    
 
    if(roomsCount > 0) { 
 
    document.getElementById("booking_summary").style.display = "block"; 
 
    totalPrice.innerText = priceTotal; 
 
    setShowQuantity.innerText = roomsCount; 
 
    roomSelectedText.innerText = roomsCount == 1 ? "room for" : "rooms selected"; 
 
    } else { 
 
    totalPrice.innerText = ""; 
 
    setShowQuantity.innerText = ""; 
 
    roomSelectedText.innerText = ""; 
 
    } 
 
}
<!-- first dropdown menu --> 
 
Room type A:<select class="rooms" onchange="update()"> 
 
    <option value="0">0</option> 
 
    <option value="1" data-price="99">1 (BAM 99)</option> 
 
    <option value="2" data-price="198">2 (BAM 198)</option> 
 
    <option value="3" data-price="297">3 (BAM 297)</option> 
 
    <option value="4" data-price="396">4 (BAM 396)</option> 
 
    <option value="5" data-price="495">5 (BAM 495)</option> 
 
</select> 
 
<br /> 
 
<!-- second dropdown menu --> 
 
Room type B:<select class="rooms" onchange="update()"> 
 
    <option value="0">0</option> 
 
    <option value="1" data-price="10">1 (BAM 10)</option> 
 
    <option value="2" data-price="19">2 (BAM 19)</option> 
 
    <option value="3" data-price="28">3 (BAM 28)</option> 
 
    <option value="4" data-price="37">4 (BAM 37)</option> 
 
    <option value="5" data-price="46">5 (BAM 46)</option> 
 
</select> 
 
<br /> 
 
<!-- third dropdown menu --> 
 
Room type C:<select class="rooms" onchange="update()"> 
 
    <option value="0">0</option> 
 
    <option value="1" data-price="12">1 (BAM 12)</option> 
 
    <option value="2" data-price="23">2 (BAM 23)</option> 
 
    <option value="3" data-price="34">3 (BAM 34)</option> 
 
    <option value="4" data-price="45">4 (BAM 45)</option> 
 
    <option value="5" data-price="56">5 (BAM 56)</option> 
 
</select> 
 
<br /> 
 
<!-- fourth dropdown menu --> 
 
Room type D:<select class="rooms" onchange="update()"> 
 
    <option value="0">0</option> 
 
    <option value="1" data-price="99">1 (BAM 99)</option> 
 
    <option value="2" data-price="198">2 (BAM 198)</option> 
 
    <option value="3" data-price="297">3 (BAM 297)</option> 
 
    <option value="4" data-price="396">4 (BAM 396)</option> 
 
    <option value="5" data-price="495">5 (BAM 495)</option> 
 
</select> 
 
<!-- display --> 
 
    <div id="booking_summary"> 
 
     <strong class="squantity"></strong> 
 
     <span class="rooms-count"></span> <br /> 
 
     <span id="total_price" class="total-price"></span> 
 
    </div>

+0

ありがとうございました。あなたは今日の私のヒーローです!私はいくつかの不要なコードがあるようです。 – Eniss

1

ラップすべてがそれに変更イベントを登録します。 <form>内の[name]属性を持つ任意のフォームノードに簡単にアクセスできます。 <output>for属性を使用すると、指定された<select>に関連付けられます。

SNIPPET

select, 
 
option { 
 
    font: inherit; 
 
}
<form id='booking' name='booking' onchange='qty.value = Number(s1.value) + Number(s2.value) + Number(s3.value) + Number(s4.value); total.value=(qty.value * 99)'> 
 

 
    <!-- first dropdown menu --> 
 
    <label for='s1'>Lot 1</label> 
 
    <select id='s1' name='s1'> 
 
    <option value="0">0</option> 
 
    <option value="1">1 - $99</option> 
 
    <option value="2">2 - $198</option> 
 
    <option value="3">3 - $297</option> 
 
    <option value="4">4 - $396</option> 
 
    <option value="5">5 - $495</option> 
 
    </select> 
 
    <br/> 
 
    <!-- second dropdown menu --> 
 
    <label for='s2'>Lot 2</label> 
 
    <select id='s2' name='s2'> 
 
    <option value="0">0</option> 
 
    <option value="1">1 - $99</option> 
 
    <option value="2">2 - $198</option> 
 
    <option value="3">3 - $297</option> 
 
    <option value="4">4 - $396</option> 
 
    <option value="5">5 - $495</option> 
 
    </select> 
 
    <br/> 
 
    <!-- third dropdown menu --> 
 
    <label for='s3'>Lot 3</label> 
 
    <select id='s3' name='s3'> 
 
    <option value="0">0</option> 
 
    <option value="1">1 - $99</option> 
 
    <option value="2">2 - $198</option> 
 
    <option value="3">3 - $297</option> 
 
    <option value="4">4 - $396</option> 
 
    <option value="5">5 - $495</option> 
 
    </select> 
 
    <br/> 
 
    <!-- fourth dropdown menu --> 
 
    <label for='s4'>Lot 4</label> 
 
    <select id='s4' name='s4'> 
 
    <option value="0">0</option> 
 
    <option value="1">1 - $99</option> 
 
    <option value="2">2 - $198</option> 
 
    <option value="3">3 - $297</option> 
 
    <option value="4">4 - $396</option> 
 
    <option value="5">5 - $495</option> 
 
    </select> 
 
    <br/><br/> 
 
    <!-- display --> 
 
    <fieldset id="summary"> 
 
    <legend>Summary</legend> 
 
    <label for='qty'>Rooms:</label> 
 
    <output for='s1 s2 s3 s4' id='qty' name='qty'></output> 
 
    <label for='total'>Total: $</label> 
 
    <output for='qty' id="total" name='total'></output> 
 
    </fieldset> 
 

 
</form>

関連する問題