在jQuery中,为什么手动单击复选框的行为与以编程方式触发复选框上的“click()”的行为不同?

时间:2011-10-06 18:03:49

标签: jquery checkbox onclick

  

可能重复:
  In jQuery, why does programmatically triggering ‘click()’ on a checkbox not immediately check it?

更新:这仅适用于jQuery 1.8及更低版本。这是fixed in jQuery 1.9

我有这个复选框。

<input type="checkbox" id="wtf">

这个事件处理程序:

$('#wtf').click(function(ev) { ev.preventDefault(); alert(this.checked); });

当我点击复选框时,我首先看到复选标记出现,然后我看到警告“真”,然后我看到复选标记消失。

但是当我拨打$('#wtf').click()时,我看不到任何复选标记,我看到警告“false”。

为什么单击是手动时的行为与点击是程序化时的行为不同?

我正在使用谷歌浏览器,如果这有所作为。

3 个答案:

答案 0 :(得分:2)

原因是调用.click()函数只是触发一个函数。它实际上是对单击该按钮时触发的函数的调用;它实际上并没有改变复选框的状态。但是,当您手动单击它时,您正在更改状态,然后又调用该函数。

答案 1 :(得分:1)

我认为它与Checkbox控件本身有关。您正在解雇的事件是onchange而不是点击。由于可以选中或取消选中复选框。它不能仅仅被视为一个按钮。我认为使用单选按钮可以找到同样的问题。

答案 2 :(得分:0)

正确和正确。复选框具有已选中或未选中状态。 click事件是一个通用事件,可以应用于HTML页面中的任何元素。如果要测试值或有条件地触发函数,请先检查$('wtf').is(':checked')