22

A fellow programmer told me it was 'bad practice' to use hidden fields in my HTML code. Essentially I have a unordered list that a user selects an item based on a category they selected (the categories are pictures). It then calls javascript to set a hidden field to the value the user selected so I can send it along when the form submitted. Is this truly bad practice, is there another way I should be doing this?

4

5 回答 5

5

隐藏字段存在,因此可以在不显示输入的情况下在表单中设置值,我不明白使用它们是一种不好的做法。如果您需要创建自定义小部件并通过表单发送它的值,这是最简单的方法,您仍然可以使用带有动态选择列表的选择按钮,但您必须做一些丑陋的黑客来使界面看起来漂亮。

于 2012-11-29T21:19:53.620 回答
4

这是一种非常普遍的做法。在您的情况下,我能想到的唯一问题是,如果您的访问者禁用了 JavaScript,它会中断,因此您可能需要回退。

于 2012-11-29T21:19:46.243 回答
3

如果你想提交一个表单并且需要传递一些不包含在可见表单字段中的简单值,那么隐藏字段可能是最古老、最可靠和最干净的方式。

考虑替代方案:

  1. 无用:不要传递任何隐藏的东西。

  2. 差:抽象,例如 ASP.Net 视图状态,它无论如何都使用隐藏字段但会污染请求模型(并且可以添加一堆不需要的数据,除非你小心 - 大多数人都没有)。

  3. BAD:传递查询字符串上的所有表单值。这通常是非 RESTful 的,并且可能是完全有害的(用户为执行意外操作的查询字符串添加书签)。

  4. 也许:使用 AJAX 手动 POST 值。假设您只想执行异步操作,这可能是一个非常有效的实现。

  5. Maybe:服务器处理更改的完整往返(可能是在没有 JavaScript 的情况下支持用户的唯一方法)。

于 2012-11-29T21:23:54.430 回答
2

对必须安全的信息使用隐藏字段是不好的做法。当没有安全问题时,使用隐藏字段通常没问题。

于 2012-11-29T21:26:25.743 回答
2

在 HTML DOM 中存储 javascript 值通常是一种不好的做法。您应该尝试创建一个存储在您的 javascript 环境中的列表。

window.myList = new Array();

当你有很多东西时,我建议你使用像Underscore.js甚至Backbone.js这样的东西。

如果您只在提交时使用这些数据,那么您的案例似乎是合法的。

于 2012-11-29T21:15:14.907 回答