0

現在、カスタム スタイルのチェックボックスとして、次のコードの複数のブロックを使用しています。

  <div class="row-fluid">
    <div class="span12 card card-even">
      <div>
      <h3><label class="checkbox">
      <i class="icon-check-empty"></i>
      <input type="checkbox" value="1" />
    </label></h3>
      </div>
    </div>
  </div>

JS:

jQuery.fn.extend({
  shinyCheckbox: function() {
    var setIcon;
    setIcon = function($el) {
      var checkbox, iclass;
      checkbox = $el.find("input[type=checkbox]");
      iclass = "";
      if (checkbox.is(":checked")) {
        iclass = "icon-ok";
      } else {
        iclass = "icon-check-empty";
      }
      return $el.find("i[class^=icon-]").removeClass("icon-check").removeClass("icon-check-empty").addClass(iclass);
    };
    this.find("input[type=checkbox]").change(function() {
      return setIcon($(this).parents("label.checkbox"));
    });
    return this.each(function(i, el) {
      return setIcon($(el));
    });
  }
});

$(document).ready(function() {
  return $("label.checkbox").shinyCheckbox();
});

icon-check-empty&クラスをスタイリングすることで要件を達成できicon-checkますが、チェックボックスをクリックすると、最初のチェックボックスのみがアクティブになります。

this キーワードを使用して問題を解決し、正しいチェックボックスがアクティブになるようにするにはどうすればよいですか?

4

2 に答える 2

2

これは、あなたのコードに基づいて、私が行う方法です:

jQuery.fn.extend({
    shinyCheckbox: function () {
        var setIcon = function ($el) {
            var checkbox = $el.find("input[type=checkbox]"), checked = checkbox.is(':checked');
            checkbox.val(+checked);
            return $el.find("i[class^=icon-]").removeClass("icon-check-empty icon-ok").addClass(function () {
                return checked ? "icon-ok" : "icon-check-empty";
            });
        };
        this.find("input[type=checkbox]").on('change', function () {
            return setIcon($(this).closest("label.checkbox"));
        });
        return this.each(function (i, el) {
            return setIcon($(el));
        });
    }
});

$(document).ready(function () {
    $("label.checkbox").shinyCheckbox();
});

主な問題は、クラスを削除するのではicon-okなく、クラスのみを削除することでしたicon-check。また、コードを少しクリーンアップしました。

ここで動作しています:http://jsfiddle.net/W88fk/1/

于 2013-07-15T15:05:28.703 に答える
1

あなたが試すことができます

jQuery.fn.extend({
  shinyCheckbox: function() {
    return this.each(function() {
      var el=$(this),checkbox = el.find("input[type=checkbox]");
      checkbox.change(function() {
          var iclass = checkbox.is(":checked")?"icon-ok":"icon-check-empty";
          el.find("i[class^=icon-]").removeClass().addClass(iclass);
          var cval= checkbox.is(":checked")?0:1;
          checkbox.val(cval);
      });
});
}
});

$(document).ready(function() {
  $("label.checkbox").shinyCheckbox();
});    

トゥーグルのクラスと値http://jsfiddle.net/rWFMm/1/

于 2013-07-15T15:23:25.377 に答える