If statement 为什么赢了';我的咖啡脚本if/else语句是否有效?

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元素:

<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的
==
等价的代码,因此没有强制问题。