3

我可以将行为简化为最简单的情况(在最新的 Chrome、Safari、Firefox、IE 9 和 10 中测试(jsfiddle 在 IE 8 上不起作用)):

http://jsfiddle.net/fjvqa/1

$("input").click(function (evt) {
    console.log("click event handler invoked", evt);
    console.log($("input").attr("checked"));
    console.log($("input").prop("checked"));
    console.log($("input").is(":checked"));
});

$("input").click();

使用 HTML:

<input type="checkbox"></input>

输出是:

undefined
false
false

那么它应该报告未选中复选框是否应该是正确的?

如果它是正确的,那么为什么在 jQuery 1.9.1 中,行为完全相反? http://jsfiddle.net/fjvqa/2

如果它不正确,我想知道为什么在 2012 年 11 月 13 日发布的 jQuery 1.8.3 中仍然存在这样一个简单的错误,也就是大约 4 个月前......对于如此明显的错误?

PS我明白(1)attr()不应该使用,而是prop()应该使用。我打印出来只是为了看看发生了什么。(2)如果使用 jQuery 1.8.3 ,change处理程序实际上会报告与报告相反的内容:http: //jsfiddle.net/fjvqa/3如果是 jQuery 1.9.1,它们会报告相同的内容:http://jsfiddle .net/fjvqa/4 我正在寻找的是应该发生的真实情况。click

4

1 回答 1

0

评论给了你答案 - 点击之后发生的变化。您正在绑定到使更改发生的事件。我猜您会看到版本之间的差异,因为对此没有明确的定义。解决方案是使用 .change 而不是 .click:

更新小提琴:http:
//jsfiddle.net/fjvqa/22/

$("input").change(function (evt) {
    console.log("click event handler invoked", evt);
    console.log($("input").attr("checked"));
    console.log($("input").prop("checked"));
    console.log($("input").is(":checked"));
});

$("input").click();

输出:

checked
true
true
于 2013-04-17T08:49:55.903 回答