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/

ただし、( http://js2coffee.org/を使用して)CoffeeScriptにコンパイルすると、チェックボックスがオフになっていると機能が壊れます。

$(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回だけ実行されているためだと思います。

何が問題なのですか?

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

2つのことが起こります:

  1. @checked = trueCoffee Scriptはすべての関数の最後にreturnを置くので、 return this.checked = true;
  2. Jqueryの関数がをeach()返す場合false、それは続行されません。

これを解決するのは、最後の行を変更することです

@checked = false

このようなものに:

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