关于Html表单中的checkbox,我又迷茫了

其实以前我遇到过Html表单里面的这个checkbox的问题,这个被定义成一个feature也可以,一个bug也未尝不可,至少我这么认为。

表单中的checkbox,只有在状态是on的时候,才会提交到服务器,否则相关键值不会提交。这个从语意上,貌似是没有错的,checkbox,翻译成复选框,就代表这个可有可无。那用户没有勾选的时候,没有任何东西提交上来,这很公平,合理,这是一个feature。

但是这个东西,在编写程序的时候,就会带来一些不大不小的麻烦。比如我们常见的一种做法,用户提交一个表单上来,然后我们遍历每个键,检查这个键是否可写,然后把键的值写入到DB中的对应字段里。如果那个字段是个checkbox,那情况就变得有些麻烦。因为你必须每次都把checkbox字段,都初始化成空,然后如果用户提交上来有这个字段,你才能重新填上这个。我不知道怎么描述这种痛苦,就意味着你得每个处理表单提交的子程序,必须不能通用,他们必须知道自己handle的这个表单有些什么字段,哪些是checkbox,然后如果用户提交东西上来,那么要先把那些checkbox给初始化成空,然后再赋值。

想想看吧,如果你的表单是分批提交的子表单,这将给你带来多大的麻烦。从程序逻辑上讲,我们喜欢0或者1,true或者false,而不是1或者nothing,true或者nothing。为什么从语意上看没错的东西,在程序里就变得这么痛苦了呢?好吧,那就是我们选错了控件。对于我说的这种场景,系统里有些东西需要开关的,要么开,要么关,那么这种交互本质上不应该用checkbox来表达,而是应该用一组radiobox或者别的什么东西,因为check的uncheck状态代表的其实不是“否”,而是“没有”。你看,听起来差不多,但是其实就是那么回事情。

好吧,也嚼不清楚了,您自己体会吧~