为什么这个表达式 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"));
我的表单中有类似于以下的代码:
<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"));