我已经阅读了多篇关于 SO 的文章,如果用户禁用了 Javascript,理想情况下您的页面应该“优雅地降级”。我不确定一般应该做哪些类型的事情来实现这一点。
我有一个用于配置“时间表”的 HTML 代码块。根据选择框的值,会显示不同的字段。
<select name="schedule.frequency"
id="schedule.frequency"
onChange='updateScheduleFields()' >
<option value="Manual">Run Manually</option>
<option value="Monthly">Monthly</option>
<option value="Weekly">Weekly</option>
<option value="Daily">Daily</option>
<option value="Hourly">Hourly</option>
</select>
When the select is updated, I hide the fields that are shown so that things like 'day of the week' or 'days of the month' aren't shown when it's inappropriate.我不确定如何在没有 Javascript 的情况下优雅地降级,因为如上所述,某些字段完全不适合各种计划类型。
我的问题是: 一般来说,如果没有 Javascript,我将如何制作禁用/隐藏不适当字段或某些预处理/后处理正确降级的东西?
我也会对可以很好地处理这种类型退化的特定站点感兴趣?
最佳答案
基本思想是你有一个标准的(非 js)方式来做某事,然后你添加 JavaScript 来覆盖该默认行为。
在您的情况下,您有一个 select
,因此非 js 行为是,当您选择一个选项时,您提交一个表单,该表单加载页面的新版本,其中显示了不同的字段。
您的 JavaScript(如果启用)将隐藏提交按钮并进行就地更新。
考虑它的首选方式是 progressive enhancement ,实现这种方式要容易得多。使您的页面作为准 HTML 工作,然后使用 CSS 和 JavaScript 逐步增强它。那么你永远不必计算它是否会优雅地降级。
如果您的 JavaScript 和 CSS 位于单独的文件中而不是内联文件,则进行渐进式增强会更容易。借助像 jQuery* 这样的 Ajax 库,您可以使用 CSS 选择器选择元素,以便向这些元素添加行为。在您的情况下,您会执行 $('#schedule_frequency').change(updateScheduleFields)
(我认为您的 ID 中不应该有句点)。
* 免责声明:可以在没有库的情况下在 JavaScript 中选择 HTML 元素,并且存在除 jQuery 之外的 Ajax 库。