为什么这个表达式 return 在 Firefox/Chrome 中为真而在 IE 中为假?

Why does this expression return true in Firefox/Chrome and false in IE?

我的表单中有类似于以下的代码:

<input type="hidden" id="submitMyForm" name="submitMyForm" checked="checked" />

当我尝试在 if 语句中使用此代码时,我意识到它对 Firefox/Chrome 返回 true,但对 IE:

返回 false
$('#submitMyForm').prop("checked")

这里有一个jsfiddle来说明。

为什么 IE 对这个表达式的解释不同?而且,从更实际的角度来看,我可以使用的等效表达式是什么,它在所有浏览器中的计算结果都是真的?

您的 HTML 无效(无论如何,在 HTML 5 中,早期版本的 HTML 无法在 DTD 中表达规则,但它仍然是非确认的)。只有单选按钮和复选框可以具有 checked 属性。隐藏的输入可能不会。您遇到的差异是由于浏览器试图以不同的方式从 HTML 中的错误中恢复。

明智的做法是完全不使用带有选中属性的隐藏输入。

也许您可以改用 data-checked 属性。然后使用 .data('checked').

访问它

您还可以继续使用损坏的 HTML 并检查属性本身(而不是从中生成的 属性):

alert($('#submitMyForm').attr("checked"));