可能重复:
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”。
为什么单击是手动时的行为与点击是程序化时的行为不同?
我正在使用谷歌浏览器,如果这有所作为。
答案 0 :(得分:2)
原因是调用.click()
函数只是触发一个函数。它实际上是对单击该按钮时触发的函数的调用;它实际上并没有改变复选框的状态。但是,当您手动单击它时,您正在更改状态,然后又调用该函数。
答案 1 :(得分:1)
我认为它与Checkbox控件本身有关。您正在解雇的事件是onchange而不是点击。由于可以选中或取消选中复选框。它不能仅仅被视为一个按钮。我认为使用单选按钮可以找到同样的问题。
答案 2 :(得分:0)
正确和正确。复选框具有已选中或未选中状态。 click事件是一个通用事件,可以应用于HTML页面中的任何元素。如果要测试值或有条件地触发函数,请先检查$('wtf').is(':checked')
。