自定义样式复选框无法正常工作

时间:2013-07-15 14:46:12

标签: javascript jquery forms coffeescript

目前我正在使用以下代码的多个块作为我的自定义样式复选框:

  <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&amp;的样式来实现我的要求。 icon-check类,但是当我单击任何复选框时,只会激活第一个复选框。

如何使用this关键字解决问题,以便激活正确的复选框?

2 个答案:

答案 0 :(得分: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/

答案 1 :(得分: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/