checkbox - 为复选框添加选定的期权价格 - 使用 Svelte
问题描述
我正在尝试在选中和取消选中复选框时更新总数(以防用户改变主意并且不再需要该项目)。但我不确定如何获得分配给每个玩具的实际价值。例如:如果用户选择玩具 1 和 3,他们应该会看到:您订购了玩具 1、玩具 3,您的总金额为 6.00 美元。现在,我为这些值分配了名称本身,这不是我想要的,但我只是把它显示为我正在尝试做的事情。他们是我应该使用的其他东西实际执行操作以获得总数吗?
<script>
let toylist = [];
let toynames = [
'Toy1 5.00',
'Toy2 5.00',
'Toy3 1.00',
];
function join(toylist) {
return toylist.join(', ');
}
</script>
{#each toynames as toy}
<label>
<input type=checkbox bind:group={toylist} value={toy}> {toy}
</label>
{/each}
{#if toylist.length === 0}
<p>Pick at least one toy</p>
{:else}
<p>
You ordered {toylist.join(', ')} and your total is
</p>
{/if}
解决方案
隔离每个玩具价格的最佳方法是将您的玩具数组制作成一组对象,其中“名称”是一个键值对,另一个是价格。对于操纵数据,如果每个玩具都有一个 id 会很有帮助,并且我已经为每个玩具添加了一个“选定”布尔值,如果它们被添加或从“玩具列表”中删除,它就会更新。我还添加了一个“总计”变量来保存所选玩具价格的总和。
我已经玩过你的代码来完成这项工作。我使用了按钮而不是复选框,但你可以用任何你喜欢的方式来做。所以试试这个代码,它应该做你想做的事。
<script>
let toylist = [];
let toys = [
{id: 1, name: 'Toy 1', price: 5.00, selected: false},
{id: 2, name: 'Toy 2', price: 5.00, selected: false},
{id: 3, name: 'Toy 3', price: 1.00, selected: false}
];
let total = 0.00
function join(toy) {
if(toy.selected === false) {
toylist = [...toylist, toy.name]
total = total+toy.price
let i = toys.findIndex(t => t.id === toy.id)
toys[i].selected = true
toys = toys
} else {
total = total-toy.price
let i = toys.findIndex(t => t.id === toy.id)
let i2 = toylist.findIndex(t => t === toy.name)
toylist.splice(i2, 1)
toylist = toylist
toys[i].selected = false
toys = toys
}
}
</script>
{#each toys as toy}
<label>
{toy.name}: ${toy.price} <button on:click="{() => join(toy)}" value={toy.name}>{toy.selected ? 'remove' : 'add'}</button>
</label>
{/each}
{#if toylist.length === 0}
<p>Pick at least one toy</p>
{:else}
<p>
You ordered {toylist} and your total is ${total}
</p>
{/if}
推荐阅读
- asp.net-mvc - ASP.NET MVC 中的路由交换
- reactjs - 如何在自定义验证器中使用 PropType 内置函数?
- javascript - 如何在 JavaScript 中的嵌入式 HTML 中创建 if 语句以显示 CSS 类
- api - 在 Flutter 中使用 Multi Image Picker 选择图像后如何获取图像路径?
- sql - 如何将 varchar 转换为 int - SQL 错误:'=' 不能应用于 varchar、bigint
- python - 查找大小为 K 且总和可被 M 整除的子数组的数量?
- cmd - 有没有办法用命令显示 wim 文件的索引?
- node.js - 找不到本地安装的 NPM 模块命令
- django - 如何使 unique_together 双向?
- azure - Azure B2C Twitter ID 提供程序不起作用