If statement 为什么赢了';我的咖啡脚本if/else语句是否有效?
当有人更改选择选项时,我一直在尝试更新总价。下面是我正在使用的select元素:If statement 为什么赢了';我的咖啡脚本if/else语句是否有效?,if-statement,coffeescript,If Statement,Coffeescript,当有人更改选择选项时,我一直在尝试更新总价。下面是我正在使用的select元素: <select id="payment_talks_purchased" name="payment[talks_purchased]"> <option value="1">One</option> <option value="2">Three</option> </select> jQuery(document).ready(f
<select id="payment_talks_purchased" name="payment[talks_purchased]">
<option value="1">One</option>
<option value="2">Three</option>
</select>
jQuery(document).ready(function() {
var price = $(".total-price span.price")
var save = $(".savings")
$("#payment_talks_purchased").change(function() {
var selection = $("#payment_talks_purchased").val()
if (selection == 2) {
price.html("$12");
save.css("visibility", "visible");
} else if (selection == 1) {
price.html("$5");
save.css("visibility", "hidden");
}
});
});
它工作得很好。它将价格更改为12美元,并显示折扣信息。如果我将选择选项更改回1/1,它会将文本更改回$5并删除折扣消息
我将其转换为CoffeeScript,但它仅在我进行第一次更改时起作用。价格已更新。但是,当我尝试将其更改回选项1时,它不会更新
jQuery ->
price = $(".total-price span.price")
save = $(".savings")
select = $("#payment_talks_purchased")
select.change ->
selection = select.val()
if selection = 2
price.html "$12"
return save.css "visibility", "visible"
else if selection = 1
price.html "$5"
return save.css "visibility", "hidden"
这件事我已经做了好几个小时了,真是束手无策。非常感谢您的帮助。您的
选择=1
如果语句(仍然)是CoffeeScript中的作业,您需要使用=
进行比较。试试这个:
jQuery ->
price = $(".total-price span.price")
save = $(".savings")
select = $("#payment_talks_purchased")
select.change ->
selection = select.val()
if selection == '2'
price.html "$12"
return save.css "visibility", "visible"
else if selection == '1'
price.html "$5"
return save.css "visibility", "hidden"
此外,除非您想使用selection=+select.val()
(感谢此强制转换技巧)或parseInt(select.val(),10)
,将值“强制转换”为一个数字,否则您需要与字符串进行比较。您可以使用开关:
switch selection
when '2'
price.html "$12"
save.css "visibility", "visible"
when '1'
price.html "$5"
save.css "visibility", "hidden"
您还可以拿走return
,因为函数总是返回它们的最终值。这是我的.50美分。考虑两件事:这只是我的简单意见,它可能不是世界上最好的答案
a) 如果在If语句中已经有一个return,则不需要ELSE If
jQuery ->
price = $(".total-price span.price")
save = $(".savings")
select = $("#payment_talks_purchased")
select.change ->
selection = select.val()
if selection == '2'
price.html "$12"
// Since you return here, you dont need any other "else if"
return save.css "visibility", "visible"
price.html "$5"
return save.css "visibility", "hidden"
不,IMHO,如果ELSE不能提高可读性。回报就是回报。时期就这么简单
jQuery ->
price = $(".total-price span.price")
save = $(".savings")
select = $("#payment_talks_purchased")
select.change ->
selection = select.val()
// "ternary" coffee version (if then else)
price.html if selection == '2' then "$12" else "$5")
save.css "visibility" (if selection == '2' then "visible" else "hidden")
但是,最好的办法是摆脱IF,ELSE,SWITCH和所有这些垃圾。想想OOP和您的代码可以开始变得更好。起点可以是:
options = [
{price: '$12', visible:"visible"},
{price: '$5', visible:"hidden"}
];
jQuery ->
price = $(".total-price span.price")
save = $(".savings")
select = $("#payment_talks_purchased")
select.change ->
// If the val of your select was 0 and 1, you wouldnt need the (-1) part
selection = parseInt(select.val) -1
price.html options[selection].price
save.css "visibility" options[selection].visible
就是这样。几乎相同的代码,但具有更好的实现(imho)。谢谢。完全正确。如果您想将表单输入转换为数字,请使用selection=+select.val()
。除非您明确希望触发类型强制,否则不是首选进行比较吗?@jpmc26相当于CoffeeScript中的=
,因此在最终的JavaScript版本中,两者最终都是=
。CoffeeScript中没有与JavaScript的==
等价的代码,因此没有强制问题。