【问题标题】:Why does this expression return true in Firefox/Chrome and false in IE?为什么这个表达式在 Firefox/Chrome 中返回 true 而在 IE 中返回 false?
【发布时间】:2015-01-22 19:35:12
【问题描述】:

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

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

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

$('#submitMyForm').prop("checked")

这里有一个jsfiddle 来说明。

为什么 IE 会以不同的方式解释这个表达式?而且,在更实际的情况下,我可以使用什么等价表达式来在所有浏览器中评估为真?

【问题讨论】:

  • 仅供参考 checked 不是隐藏输入的有效属性。我想这是不一致的根源。

标签: javascript jquery internet-explorer cross-browser


【解决方案1】:

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

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

您可能可以改用data-checked 属性。然后使用.data('checked') 访问它。

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

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

【讨论】:

  • 谢谢。这是一个旧页面——我认为它是这样设置的,因为同一个表单有两个表单——它可以是更新或创建表单。当将其用作创建表单时,此复选框元素实际上确实存在 - 当用作更新表单时它不存在,因此他们尝试使用此隐藏字段来模拟它。我会找到一种更正确的编码方式。
  • 选中/未选中复选框的隐藏等效项是存在或不存在的复选框,不具有选中状态。
  • 我认为他们试图对表单的任一变体使用相同的处理代码。所以他们希望能够检查$('#submitMyForm').prop("checked"),无论使用的是哪个版本的表单。实际的代码比示例要复杂一些(而且我没有很好地为示例的元素命名),但这是基本思想。感谢您帮助我查明问题,我将重新编写代码,使其成为正确的 html 并更合乎逻辑地完成所需的内容
猜你喜欢
  • 2019-12-07
  • 2015-06-21
  • 1970-01-01
  • 2014-10-14
  • 1970-01-01
  • 2018-08-27
  • 2018-11-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多