每当我得到一个要求使用“其他(在下面指定)”选项下拉的规范时,我会呻吟,因为它们很难实现。
<select>
并弹出一个隐藏的<input type="text"/>
吗? this widget的“过滤”版本是我发现的最友好的版本,但实现看起来不太好(2000行,并且它有错误)。作为一个例子,假设我有一个名为vehicles
的表。它列出了我网站上注册的所有车辆。它包含诸如年份,品牌,型号,里程等内容。
假设我有另一张表,其中包含用户可以选择的所有品牌:本田,丰田,宝马等。
但是我的“make”表可能不是最新的,所以如果没有列出,我想允许用户输入自己的。在这种情况下,他们会从下拉列表中选择“其他制作”,然后手动输入制作。
您如何在vehicles
表格中表示这一点?
一个。作为一个字段,make
可能是varchar(255)
。即,如果他们选择现有的制作,则只会将其复制到该字段中
湾作为两个字段:make_id
和make_other
。第一个持有makes
表的一个键,第二个只有在选择“其他”时才会填写。
显示/隐藏“其他”文本框的jQuery解决方案:
$('select>option').filter(function() {
return !!$(this).data('other');
}).each(function() {
$(this).closest('div.row').next().toggle($(this).is(':selected'));
$(this).parent().on('change', function() {
if($(':selected',this).data('other')) {
$(this).closest('div.row').next().show().find('input').focus();
} else {
$(this).closest('div.row').next().hide().find('input').val('');
}
});
});
只需将data-other="1"
添加到“其他(请注明)”<option>
即可。假设您的输入在<div class="row">
中布局 - 修改其他布局。
答案 0 :(得分:1)
我更喜欢将信息存储在数据库中的第一选择,原因如下:
对于如何在数据库中存储我更喜欢外来列技术,并且我不会使用第二列存储该值有两个原因
Other
表,所以我不担心数据库性能问题Other
表值的情况,我不必传递存储值并更改它的所有表。对于某些情况,我不介意为String
表使用Other
主键,因此我会直接存储该值并保留Other
表以供描述和任何相关信息。因为在大多数情况下,与系统中的核心表(员工,用户,购物车,产品......等)相比,表的大小将非常小。但是我应该保证很少更新字符串值(例如,国家/地区表)。