2

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

它在普通 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/

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

怎么了?

4

2 回答 2

2

问题如下。在转换后的脚本中,由 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

这个小提琴展示了它的作用。

于 2012-08-11T14:25:52.993 回答
2

发生两件事:

  1. Coffee Script 将 return 放在每个函数的末尾,因此 @checked = true更改为return this.checked = true;
  2. 如果 Jquery 中的函数each()返回false,则它不会继续。

解决这个问题的方法是改变你的最后一行

@checked = false

像这样:

@checked = false
return true
于 2012-08-11T14:25:55.847 回答