基于复选框单选按钮调整总成本标价
Adjusting the Total CostList Price based on CheckboxesRadio Buttons
概述:
这是我第一次使用javascript。我正在尝试使用单选按钮和复选框的组合来调整"总成本"&一个项目在多种不同条件下的"标价"。JS Fiddle反映了我目前的处境。任何建议、例子、评论或帮助形式都将不胜感激,因为我完全陷入了困境。
JS Fiddle(代码如下,以防您不想打开JS-Fidle(:
http://jsfiddle.net/y2u24x3r/4/
我完全陷入困境的问题''条件:
[广播一]有多少人参加?(1( (2(
- (2( 应将总成本增加一倍(除非选中所有四个事件框。请参阅下文(
[广播二台]你是议员吗?(否((是(
- (否(应使每次活动的成本为26.00美元,如Jfidd''代码如下
- (是(将显示的每个事件的价格更改为$18.00,并自动调整总成本
【四个事件复选框】
-
如果选中了所有四个事件框,"与会者"="1","您是会员吗"="是",则覆盖以上所有条件并将价格设置为68.00美元。
-
如果选中了所有四个事件框,与会者="2",您是会员吗="是",则覆盖以上所有条件并将价格设置为136.00美元。
HTML:
<font color="orange">How many attendees?</font> <input type="radio" name="attendees" id="attendees" value="1" checked="checked" />1 <input type="radio" name="attendees" id="attendees" value="2"/>2<br/>
<font color="orange">Are you a Member?</font> <input type="radio" name="member" id="member" value="0" checked="checked" />No <input type="radio" name="member" id="member" value="1"/>Yes <br/><br/>
<form name="listForm"><font color="orange">Select the Concerts you want Tickets for:</font><br/>
<input type="checkbox" name="event" value="1" onchange="checkTotal()"/><font color="#33FF33"> <div class="price"></div></font></input> Nov. 1, 2015 -- Concert 1<br/>
<input type="checkbox" name="event" value="1" onchange="checkTotal()"/><font color="#33FF33"> <div class="price"></div></font></input> Dec. 1, 2015 -- Concert 2<br/>
<input type="checkbox" name="event" value="1" onchange="checkTotal()"/><font color="#33FF33"> <div class="price"></div></font></input> Jan. 1, 2015 -- Concert 3<br/>
<input type="checkbox" name="event" value="1" onchange="checkTotal()"/><font color="#33FF33"> <div class="price"></div></font></input> Feb. 1, 2015 -- Concert 4<br/><br/>
<font color="#33FF33">Total Cost:</font> <input value="$0.00" readonly="readonly" type="text" id="total"/>
</form>
Javascript:
function checkTotal() {
var attendees = document.getElementsByName("attendees");
var member = document.getElementsByName("member");
var total = 0;
var event = 0;
if (member == 0) {
price = 26.00;
}
else if (member == 1) {
price = 18.00;
}
for (var i = 0; i < event.length; i++) {
if (event[i].checked) {
total += parseFloat(member.value);
total = total * attendees;
}
}
if (member == 1 && event == 4 && attendees == 1) {
total = 68.00;
}
if (member == 1 && event == 4 && attendees == 2) {
total = 136.00;
}
document.getElementById("total").value = "$" + total.toFixed(2);
}
感谢您分享您的尝试,现在我可以帮助您更正代码了。让我们逐一讨论代码的问题:
1.左侧分配无效
与Visual Basic等语言不同,在JavaScript中,必须有一个双==运算符才能检查条件。因此,在下一行:
if (member = 1 && event = 4 && attendees = 1)
JavaScript真正理解的是:
将1放入CCD_ 1,将1放入CCD_ 2中,并将1放入CCD_ 3中。
为了让JS检查它们的值是否等于1,您需要使用一个二重方程运算符:
if (member == 1 && event == 4 && attendees == 1)
2.使用系统保留关键字
前一个之所以是一个问题,是因为event
这个词毕竟,JS可以简单地为所有关键字分配1,但它却在控制台中添加了一个错误,说分配无效,那为什么呢?-这是因为在JavaScript中有一个名为event
的保留关键字,它表示函数中的事件参数。所以当你分配
onchange="checkTotal()"
一旦调用该函数来处理更改事件,事件数据将在内置的event
变量中传递给该函数。因此,您应该将输入元素的名称更改为其他名称,可能是"eventCheckBox">或其他名称。
3.重复ID
Id应该是唯一的。当你在JS中按ID搜索某个东西时,它会从页面顶部搜索并返回它找到的第一个,因为它假设这个ID是唯一的。此外,在JavaScript中,您可以通过元素ID来寻址元素,而无需首先使用getElementsByID()
获取元素,因此,当您使用与页面上的多个ID名称相同的var名称时,您看到问题了吗?为每个元素创建唯一的id。如果您想要元素的公共标识符,请使用公共类。
4.获取单选按钮的值
最有可能的是,您试图将单选按钮命名为相同的名称,并认为当您询问值时,您会得到选中按钮的值。好吧,它的想法很好,但不幸的是,它在JavaScript中不能以这种方式工作。您需要做的是找到选中的一个并获取其值。它相当简单,只有一行代码:
document.querySelector('input[name="member"]:checked').value;
*这同样适用于参和者。
5.计数选中复选框
虽然遍历复选框并更改总值是可行的,但使用下一行来计算其中检查了多少要简单得多
document.querySelectorAll('input[name="eventCheckBox"]:checked').length;
6.可选
如果您希望在更改与会者和会员资格时更新总价,则还需要向他们添加更改事件。
这是你的固定代码:
function checkTotal() {
//get values from the inputs
var attendees = document.querySelector('input[name="attendees"]:checked').value;
var member = document.querySelector('input[name="member"]:checked').value;
var SelectedEvents = document.querySelectorAll('.EventCheckBox:checked').length;
//init vars;
var total = 0;
var price = 26.00;
if (member == 1) {
price = 18.00;
}
//calculate cost
total = SelectedEvents * attendees * price;
if (member == 1 && SelectedEvents == 4 && attendees == 1) {
total = 68.00;
}
if (member == 1 && SelectedEvents == 4 && attendees == 2) {
total = 136.00;
}
document.getElementById("total").value = "$" + total.toFixed(2);
}
<font color="orange">How many attendees?</font>
<input type="radio" name="attendees" value="1" checked="checked" onchange="checkTotal()" />1
<input type="radio" name="attendees" value="2" onchange="checkTotal()" />2
<br/>
<font color="orange">Are you a Member?</font>
<input type="radio" name="member" value="0" checked="checked" onchange="checkTotal()" />No
<input type="radio" name="member" value="1" onchange="checkTotal()" />Yes
<br/>
<br/>
<form name="listForm"><font color="orange">Select the Concerts you want Tickets for:</font>
<br/>
<input type="checkbox" name="eventCB1" value="1" onchange="checkTotal()" class="EventCheckBox" /><font color="#33FF33"> <div class="price"></div></font>
</input>Nov. 1, 2015 -- Concert 1
<br/>
<input type="checkbox" name="eventCB2" value="1" onchange="checkTotal()" class="EventCheckBox" /><font color="#33FF33"> <div class="price"></div></font>
</input>Dec. 1, 2015 -- Concert 2
<br/>
<input type="checkbox" name="eventCB3" value="1" onchange="checkTotal()" class="EventCheckBox" /><font color="#33FF33"> <div class="price"></div></font>
</input>Jan. 1, 2015 -- Concert 3
<br/>
<input type="checkbox" name="eventCB4" value="1" onchange="checkTotal()" class="EventCheckBox" /><font color="#33FF33"> <div class="price"></div></font>
</input>Feb. 1, 2015 -- Concert 4
<br/>
<br/>
<font color="#33FF33">Total Cost:</font>
<input value="$0.00" readonly="readonly" type="text" id="total" />
</form>
和Fiddle
更新:
如果所有复选框上的名称相同会导致任何类型的问题,则可以轻松处理。
javascript/html/css有很多不同的方法来实现相同的结果,随着时间的推移,你会学到更多的技巧,现在有两个:
a。^=
属性选择器:
这将选择属性以特定字符串开头的所有元素
之前,我们使用它们的确切名称选择了所有输入:
document.querySelectorAll('input[name="eventCB"]:checked')
这选择了CCD_ 9属性等于CCD_。现在,我们的元素现在在名称后面附加了ID,但所有元素仍然以相同的字符串member
1开头,因此我们可以如下更改选择器:
document.querySelectorAll('input[name^="eventCB"]:checked')
b。普通类
在我看来,为事件设置一个公共类,并使用该类来选择它们要容易得多;让它们的类为"EventCheckBox"
,例如:
document.querySelectorAll('.EventCheckBox:checked').length;
选择器字符串开头的点表示类选择。如果没有点,它将按类型选择元素,如果有点,它选择类,如果有#
,它将根据ID选择。
我已经更新了上面的片段和fiddle。
- 内部分区字体大小获胜'调整浏览器窗口大小时不会随媒体查询而更改
- 调整窗口大小时,可拖动的对象会出现在容器外部
- ExtJS——在展开/折叠时调整面板高度
- 使用JavaScript动态插入DIV的成本有多高
- Chrome应用程序调整窗口大小保持纵横比
- 如何自动调整标签的高度以适应内容
- 导航栏没有调整到浏览器屏幕的大小
- 我的购物应用程序不会将用户想要购买的东西相加,也不会打印总成本
- 无法获取表单总成本
- 挖空:无法将数量变化与购物车中的总成本绑定
- 在挖空购物车中创建总成本函数
- Javascript/JQuery 显示单个席位的总成本
- 检查可变总成本的最小值,如果小于最小值,则显示警报消息
- 试图获取jQuery中每一行的总成本
- 未捕获引用错误:未定义总成本
- javascript中的总成本函数
- 如何根据从不同选项卡中选择的项目添加总成本
- 复选框将输入添加到文本框总选择和总选择成本
- 计算选定项目的成本,然后计算总成本
- 基于复选框单选按钮调整总成本标价