我已经阅读了多篇关于 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 库。

10-07 14:30