JavaScript到CoffeeScript错误

JavaScript到CoffeeScript错误,javascript,coffeescript,Javascript,Coffeescript,我有一个功能,可以在单击最后一个复选框时切换所有其他复选框 它可以在普通JavaScript中完美工作: $(document).ready(function() { $('#manage').click(function(event) { if(this.checked) { $('.checkbox:checkbox').each(function() { this.checked = true;

我有一个功能,可以在单击最后一个复选框时切换所有其他复选框

它可以在普通JavaScript中完美工作:

$(document).ready(function() {
  $('#manage').click(function(event) {   
      if(this.checked) {
          $('.checkbox:checkbox').each(function() {
              this.checked = true;                        
          });
      }
      if(!this.checked) {
          $('.checkbox:checkbox').each(function() {
              this.checked = false;                        
          });
      }
  });
});

但是,当我编译成CoffeeScript(使用)时,当复选框被关闭时,功能中断:

$(document).ready ->
  $("#manage").click (event) ->
    if @checked
      $(".checkbox:checkbox").each ->
        @checked = true

    unless @checked
      $(".checkbox:checkbox").each ->
        @checked = false

我认为这是因为每个循环的第二个循环只运行一次


怎么了

问题如下。在转换后的脚本中,CoffeeScript创建的隐式返回为
false

unless @checked
  $(".checkbox:checkbox").each () ->
    @checked = false
    # here false is returned stopping the each function from continuing
因此,解决方案是在函数末尾添加
true

unless @checked
  $(".checkbox:checkbox").each () ->
    @checked = false
    true

这表明它在起作用。

问题如下。在转换后的脚本中,CoffeeScript创建的隐式返回为
false

unless @checked
  $(".checkbox:checkbox").each () ->
    @checked = false
    # here false is returned stopping the each function from continuing
因此,解决方案是在函数末尾添加
true

unless @checked
  $(".checkbox:checkbox").each () ->
    @checked = false
    true
这表明它在起作用。

发生了两件事:

  • Coffee脚本将return放在每个函数的末尾,所以
    @checked=true
    更改为
    返回此值。checked=true
  • 如果Jquery
    each()
    中的函数返回
    false
    ,则它不会继续
  • 解决这个问题的办法是改变你的最后一行

    @checked = false
    
    对这样的事情:

    @checked = false
    return true
    
    发生了两件事:

  • Coffee脚本将return放在每个函数的末尾,所以
    @checked=true
    更改为
    返回此值。checked=true
  • 如果Jquery
    each()
    中的函数返回
    false
    ,则它不会继续
  • 解决这个问题的办法是改变你的最后一行

    @checked = false
    
    对这样的事情:

    @checked = false
    return true