第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 jquery 中使用復(fù)選框作為按鈕自動計算總數(shù)?

在 jquery 中使用復(fù)選框作為按鈕自動計算總數(shù)?

瀟瀟雨雨 2023-08-05 20:44:22
我有一個食物菜單表格,但我在處理帶有復(fù)選框的部分時遇到了問題。我想讓表單變得更好,所以我將復(fù)選框設(shè)置為按鈕,這樣當單擊時該框就會被選中。這工作正常,但問題是當我從一個復(fù)選框移動到另一個復(fù)選框而不取消選中第一個復(fù)選框時。它不會從我的總額中減去金額。我使用了以下 jQuery 腳本:$('.drinks').on('change', function() {  $('.drinks').not(this).prop('checked', false);  });從一個復(fù)選框自動切換到下一個復(fù)選框,該復(fù)選框以圖形方式顯示,但在我的控制臺中,它實際上并沒有取消選中其他框。$(document).ready(function(){   console.log("Jquery DOM ready.");     let totalprice="200";     $('#pricedisplay').html("$" + totalprice);     $('input[name=drink-one]').change(function(){        console.log("an input just changed.");        $('input[name=drink-one]:checked').each(function(){           let oneAddon = this.value;           console.log(this.value);           totalprice = parseFloat(totalprice) + parseFloat(oneAddon);           console.log(totalprice);        });        $('input[name=drink-one]:not(:checked)').each(function (){           let oneAddon = this.value;           console.log(this.value);           totalprice = parseFloat(totalprice) - parseFloat(oneAddon);           console.log(totalprice);        });        $('#pricedisplay').html("$" + totalprice)     });     $('input[name=drink-two]').change(function(){        console.log("an input just changed.");        $('input[name=drink-two]:checked').each(function(){           let twoAddon = this.value;           console.log(this.value);           totalprice = parseFloat(totalprice) + parseFloat(twoAddon);           console.log(totalprice);        });當我單擊按鈕時,總價會正確添加。如果我單擊同一個按鈕,它會正確減去。如果我在取消單擊上一個按鈕之前單擊另一個按鈕,則整個事情會中斷并不斷添加,因為您無法返回到之前單擊的另一個按鈕以撤消其值。我需要幫助才能使該函數(shù)執(zhí)行以下操作:如果用戶不需要任何額外的飲料,價格保持不變。如果用戶選擇“喝一杯”,價格就會上漲 5。如果用戶再次點擊“喝一個”按鈕,價格就會下降 5。如果用戶點擊“喝一個”按鈕,然后立即點擊“喝兩個”按鈕,價格只會加上“喝兩個”值并減去“喝一個”值?!昂热钡纫彩侨绱?。一次只能選中一個按鈕,或者一次不能選中任何按鈕。我嘗試包含不同步驟的控制臺日志以幫助調(diào)試。
查看完整描述

1 回答

?
HUWWW

TA貢獻1874條經(jīng)驗 獲得超12個贊

該問題涉及以編程方式取消檢查輸入而不引發(fā)change事件。

說明:change事件僅在“當用戶通過單擊或使用鍵盤提交對元素值的更改時”觸發(fā),并且“不一定在每次對元素值的更改時觸發(fā)”

對于您的情況:?選中一個選項后,我們希望取消選中其他選項。我們想要添加選中選項的價格并減去未選中選項的價格。然而:

  1. 為了減去未選中的選項,我們需要觸發(fā)該change事件。

  2. 我們只想在選中某個選項時取消選中其他選項。
    我們不想取消選中某個選項時取消選中其他選項。

  3. 我們只想減去從checked 變?yōu)閡nchecked 的選項。
    我們不想減去已經(jīng)未選中的選項。

所以,而不是這個:

$('.drinks').on('change', function() {

? $('.drinks').not(this).prop('checked', false);

});

我們可以使用這個:


$('.drinks').on('change', function() {

? if (this.checked) {

? ? $('.drinks:checked').not(this).prop('checked', false).trigger('change');

? }

}

下面,我合并了一些重復(fù)的代碼,試圖使事情盡可能干燥。現(xiàn)在,每個選項都有相同的名稱“drink”,并且單個處理程序綁定到所有選項。


示范:


$(function() {


? const $priceDisplay = $('#pricedisplay');

? const $drinks = $('.drinks');

? let totalprice = 200;


? $priceDisplay.html("$" + totalprice);


? $drinks.on('change', function() {


? ? // if changed input is checked ...

? ? if (this.checked) {

? ? ? // for all checked except this, uncheck and trigger "change" event

? ? ? $drinks.filter(':checked').not(this).prop('checked', false).trigger('change');

? ? }


? ? // add or subtract price depending on checked state

? ? totalprice = this.checked

? ? ? ? totalprice + parseFloat(this.value)

? ? ? : totalprice - parseFloat(this.value);


? ? // update display

? ? $priceDisplay.html("$" + totalprice);


? });


});

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<!DOCTYPE html>


<div class="chks">

? <div id="ck-button-one">

? ? <label>

? ? ? <input class="drinks" type="checkbox" name="drink" value="5">

? ? ? <span>One</span>

? ? </label>

? </div>

? <div id="ck-button-two">

? ? <label>

? ? ? <input class="drinks" type="checkbox" name="drink" value="10">

? ? ? <span>Two</span>

? ? </label>

? </div>

? <div id="ck-button-three">

? ? <label>

? ? ? <input class="drinks" type="checkbox" name="drink" value="20">

? ? ? <span>Three</span>

? ? </label>

? </div>

</div>

<div class="price">Purchase Price:

? <span id="pricedisplay"></span>

</div>

替代方法

不要考慮在浮動價格中添加和減去,而是考慮僅將選定的選項添加到固定基本價格中。每次飲料選項發(fā)生變化時,通過增加所選選項的基本價格來重新計算總價。


當飲料選項發(fā)生變化時,所選飲料的價格將添加到基本價格中。

如果未選擇任何飲品,則基本價格不會添加任何內(nèi)容。


$(function() {


? const basePrice = "200";

? const $priceDisplay = $('#pricedisplay');

? const $drinks = $('.drinks');


? $priceDisplay.html("$" + basePrice);


? $drinks.on('change', function() {


? ? let newPrice = parseFloat(basePrice);


? ? $drinks.not(this).prop('checked', false);


? ? $drinks.filter(':checked').each(function() {

? ? ? newPrice += parseFloat(this.value);

? ? });


? ? $priceDisplay.html("$" + newPrice);


? });


});

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>


<div class="chks">

? <div id="ck-button-one">

? ? <label>

? ? ? <input class="drinks" type="checkbox" name="drink" value="5">

? ? ? <span>One</span>

? ? </label>

? </div>

? <div id="ck-button-two">

? ? <label>

? ? ? <input class="drinks" type="checkbox" name="drink" value="10">

? ? ? <span>Two</span>

? ? </label>

? </div>

? <div id="ck-button-three">

? ? <label>

? ? ? <input class="drinks" type="checkbox" name="drink" value="20">

? ? ? <span>Three</span>

? ? </label>

? </div>

</div>

<div class="price">Purchase Price:

? <span id="pricedisplay"></span>

</div>

通過稍微不同的結(jié)構(gòu),這個概念可以擴展到處理多個選項組:


$(function() {


? const basePrice = "200";

? const $priceDisplay = $('#pricedisplay');

? const $options = $('.option');


? $priceDisplay.html("$" + basePrice);


? $options.on('change', function() {


? ? // define new price from base price

? ? let newPrice = parseFloat(basePrice);


? ? // uncheck other options in this group

? ? let $thisGroupOpts = $options.filter('[name=' + this.name + ']');

? ? $thisGroupOpts.not(this).prop('checked', false);


? ? // add prices for all checked options

? ? $options.filter(':checked').each(function() {

? ? ? newPrice += parseFloat(this.value);

? ? });


? ? // display total price

? ? $priceDisplay.html("$" + newPrice);


? });


});

.optionsPane {

? display: flex;

? flex-direction: row;

? margin: 0 0 2em;

}


.optionGroup {

? flex: 1 1 auto;

}


.optionGroup label {

? display: block;

}


#pricedisplay {

? font-weight: bold;

}

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>


<div class="optionsPane">

? <div class="optionGroup">

? ? <h2>Drinks</h2>

? ? <label>

? ? ? <input class="option" type="checkbox" name="drink" value="5">

? ? ? <span>One</span>

? ? </label>

? ? <label>

? ? ? <input class="option" type="checkbox" name="drink" value="10">

? ? ? <span>Two</span>

? ? </label>

? ? <label>

? ? ? <input class="option" type="checkbox" name="drink" value="20">

? ? ? <span>Three</span>

? ? </label>

? </div>

? <div class="optionGroup">

? ? <h2>Sides</h2>

? ? <label>

? ? ? <input class="option" type="checkbox" name="side" value="3">

? ? ? <span>One</span>

? ? </label>

? ? <label>

? ? ? <input class="option" type="checkbox" name="side" value="4">

? ? ? <span>Two</span>

? ? </label>

? ? <label>

? ? ? <input class="option" type="checkbox" name="side" value="5">

? ? ? <span>Three</span>

? ? </label>

? </div>

? <div class="optionGroup">

? ? <h2>Deserts</h2>

? ? <label>

? ? ? <input class="option" type="checkbox" name="desert" value="5">

? ? ? <span>One</span>

? ? </label>

? ? <label>

? ? ? <input class="option" type="checkbox" name="desert" value="7">

? ? ? <span>Two</span>

? ? </label>

? ? <label>

? ? ? <input class="option" type="checkbox" name="desert" value="10">

? ? ? <span>Three</span>

? ? </label>

? </div>

</div>

<div class="price">Purchase Price:

? <span id="pricedisplay"></span>

</div>


查看完整回答
反對 回復(fù) 2023-08-05
  • 1 回答
  • 0 關(guān)注
  • 149 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號