我有一个地址表格,如果国家是美国,我希望有一个状态选择框,如果是外国,则将其更改为文本框,以便输入州/省。
我在PHP中生成代码(例如状态选择和国家/地区选择),我正在考虑输出选择和文本框,最初隐藏和禁用文本框,然后如果用户更改国家/地区取消隐藏并启用文本框并隐藏和禁用选择。
我的问题是,如果两个输入具有相同的名称是否有效,假设在提交表单时其中一个将被禁用?
作为奖励问题,有更好的方法吗?
答案 0 :(得分:6)
是的,这是可能的,这是最好的方法,因为禁用的输入不会在请求中发送,而是生成有效的语义HTML。
如w3中所示:
设置后,disabled属性对元素具有以下影响:
- 已禁用的控件无法获得焦点。
- 在标签导航中跳过已禁用的控件。
- 禁用的控件无法成功。
[...]
在此示例中,INPUT元素被禁用。 因此,它无法接收用户输入,也无法使用表单提交其值。
答案 1 :(得分:1)
假设你使用jQuery,你可以这样做:
HTML:
<select id="countries">
<option>Countries</option>
</select>
<select id="states" style="display: none"> <!-- States in US -->
<option>States</option>
</select>
<textarea id="address" style="display: none">
</textarea>
JS:
// Cache states list and address box beforehand so we don't have to query every time.
var $states = $("#states"),
$address = $("#address");
$("#countries").change(function () { // Bind to change event for checking if US selected
var isUnitedStates = $(this).val() == "United States";
if (isUnitedStates) { // US is selected, show States
$states.attr("id", "address").show()
$address.attr("id", "_address").hide()
} else { // US is not selected, show Address box
$states.attr("id", "_address").hide()
$address.attr("id", "address").show()
}
})
这不是很方便,但如果你真的想确定,这是你的选择。