5

我有一个地址表格,如果国家是美国,我想有一个州选择框,如果是外国,我想将其更改为文本框,以便可以输入州/省。

我在 PHP 中生成代码(例如状态选择和国家选择),我正在考虑同时输出选择和文本框并最初隐藏和禁用文本框,然后如果用户更改国家/地区取消隐藏并启用文本框并隐藏和禁用选择。

我的问题是,如果两个输入具有相同的名称,它是否有效,假设在提交表单时其中一个将被禁用?

作为一个额外的问题,有没有更好的方法来做到这一点?

4

2 回答 2

6

是的,这是可能的,这是最好的方法,因为禁用的输入不会在请求中发送,它会生成有效的语义 HTML。

w3所示:

设置后, disabled 属性对元素有以下影响:

  • 禁用的控件不会获得焦点。
  • 在选项卡导航中会跳过禁用的控件。
  • 禁用的控件不能成功。

[...]

在本例中,INPUT 元素被禁用。因此,它无法接收用户输入,也不会将其值与表单一起提交。

于 2013-09-03T02:09:14.983 回答
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()
  }
})

这不是很方便,但如果您真的想确定,这是您的选择。

于 2013-09-03T02:17:12.727 回答