2012-08-11 44 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