我有一个地址表格,如果国家是美国,我想有一个州选择框,如果是外国,我想将其更改为文本框,以便可以输入州/省。
我在 PHP 中生成代码(例如状态选择和国家选择),我正在考虑同时输出选择和文本框并最初隐藏和禁用文本框,然后如果用户更改国家/地区取消隐藏并启用文本框并隐藏和禁用选择。
我的问题是,如果两个输入具有相同的名称,它是否有效,假设在提交表单时其中一个将被禁用?
作为一个额外的问题,有没有更好的方法来做到这一点?
我有一个地址表格,如果国家是美国,我想有一个州选择框,如果是外国,我想将其更改为文本框,以便可以输入州/省。
我在 PHP 中生成代码(例如状态选择和国家选择),我正在考虑同时输出选择和文本框并最初隐藏和禁用文本框,然后如果用户更改国家/地区取消隐藏并启用文本框并隐藏和禁用选择。
我的问题是,如果两个输入具有相同的名称,它是否有效,假设在提交表单时其中一个将被禁用?
作为一个额外的问题,有没有更好的方法来做到这一点?
是的,这是可能的,这是最好的方法,因为禁用的输入不会在请求中发送,它会生成有效的语义 HTML。
如w3所示:
设置后, disabled 属性对元素有以下影响:
- 禁用的控件不会获得焦点。
- 在选项卡导航中会跳过禁用的控件。
- 禁用的控件不能成功。
[...]
在本例中,INPUT 元素被禁用。因此,它无法接收用户输入,也不会将其值与表单一起提交。
假设您使用 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()
}
})
这不是很方便,但如果您真的想确定,这是您的选择。