【发布时间】:2013-03-16 19:46:45
【问题描述】:
我想根据某些条件禁用部分 HTML 表单元素。这似乎是做到这一点的理想方式:
<fieldset disabled>
<input value="one" />
<input value="two" />
</fieldset>
现在,这两个输入被禁用。但是,这在 IE8 上似乎完全无聊。输入出现已禁用,但我仍然可以输入它们。
Fiddle(不像 JsFiddle 实际上在 IE8 中工作)
是否有针对此问题的跨浏览器解决方案,无需将 disabled 添加到每个表单元素(这会使我的脚本复杂化)。我可能会做一些棘手的事情,比如在 jQuery 中选择 <fieldset>,然后在所有表单元素中选择 .each() 并禁用它们 - 但是,我实际上是使用 Knockout 绑定设置 disabled 属性,所以真的没有地方可以添加这样的代码。我最后的办法是使用自定义的 Knockout 绑定,它也会禁用所有的孩子,但是 le sigh。
【问题讨论】:
-
您可以使用覆盖来阻止单击输入,但这不会阻止对它们进行切换,因此您将与 tabindex 属性处于同一条船上。你可以绑定一个事件来阻止 keydown 发生,甚至是 focus 事件。
-
是的,我不太喜欢那种解决方案。另外,将其集成到 Knockout 模板中仍然很麻烦。我宁愿单独禁用每个元素。
-
@MikeChristensen:
fieldset在 IE8 中不是borked。它只是不完全支持。fieldset是对 HTML5 的补充,IE8 确实支持很少的 HTML5 表单元素。请参阅 http://html5test.com results for IE8fieldset在 IE8 中仅部分支持。从结果中可以看出,不支持element attributes。所以你最有可能想出一个替代方案。正如所建议的那样,叠加层可能是其中一种选择。虽然可能有一个 polyfill 可以在 IE8 中的字段集上工作。不过,这不是 100% 确定的。 -
@MikeChristensen:如果您必须支持 IE8,另一种解决方案是根本不使用任何 HTML5 元素。我不是想变得聪明。我只是建议它作为一种选择。我也不得不承认,这很奇怪,因为根据我在之前评论中链接的 HTML5 的上述测试结果,
disabled attribute应该在 IE8 中受支持。在运行 HTML5 测试的 IE8 上转到 http://html5test.com/ 时也会显示相同的结果,显示相同的结果。确实很奇怪。
标签: javascript jquery html forms knockout.js