为什么复选框改变了两次?

时间:2013-02-11 17:03:53

标签: javascript jquery html

我这样做:

  $("input[type='checkbox']").each(function() {
    var current = $(this);
    $("label[for='" + current.attr("id") + "']").on('click', function() {
      current.change();
      alert('1');
    });
  });

  $("input[type='checkbox']").on("change", function() {
    alert('2');
  });

现在,当我点击标签时,复选框第一个警报(1)显示一次,但第二个(2)显示两次。你能告诉我为什么吗? (隐藏的复选框,似乎改变发生了两次)

1 个答案:

答案 0 :(得分:4)

您不必为<label>标记添加单独的事件处理程序。它会触发<input>上的“点击”。

最好使用“click”而不是“change”(特别是使用最新的jQuery)。旧的(可能是新的)IE版本不会在复选框上触发“更改”,直到焦点发生变化。

编辑最新jQuery让生活更美好的原因在于它修复了图书馆长期以来奇怪的“功能”。以前,以编程方式触发“单击”将导致在点击效果发生之前,使用状态中的元素调用任何“单击”处理程序。也就是说,如果你打电话

$(myCheckbox).trigger("click");

并检查了元素,将在对处理程序的调用中检查它。但是,当发生真实的点击时,浏览器会在调用处理程序之前翻转“已检查”属性的状态。这让生活变得非常奇怪,但截至1.9我很确定这是固定的。