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 回答