2012-08-11 45 views
2

我有一个函数,当最后一个复选框被点击时切换所有其他复选框。JavaScript到CoffeeScript错误

它完全在普通的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;       
      }); 
     } 
    }); 
}); 

http://jsfiddle.net/PauaN/9/

然而,当我编译成CoffeeScript的(使用http://js2coffee.org/)功能破裂时复选框被取消切换:

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

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

http://jsfiddle.net/FRs5d/7/

我想这是因为第二个循环只运行一次。

怎么回事?

回答

2

两件事情发生:

  1. 咖啡脚本把在每个功能的末端返回,所以 @checked = true变成return this.checked = true;
  2. 如果jQuery的each()回报false功能,它不会继续。

什么会解决这个问题,是改变你的最后一行

@checked = false 

到这样的事情:

@checked = false 
return true 
+0

太棒了。谢谢! – jamesharker 2012-08-11 14:35:05

2

问题是以下几点。在转换脚本通过CoffeeScript的创建的隐式返回是false

unless @checked 
    $(".checkbox:checkbox").each() -> 
    @checked = false 
    # here false is returned stopping the each function from continuing 

所以将溶液在函数

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

fiddle这表明它在动作的末尾添加true

+0

当然!这就说得通了。谢谢! :) – jamesharker 2012-08-11 14:33:28