如果一个表单输入被禁用,那么两个表单输入是否可以具有相同的名称

Can two form inputs have the same name if one is disabled?

本文关键字:表单 输入 是否 一个 如果 两个      更新时间:2023-09-26

我有一个地址表,如果国家是美国,我想有一个州的选择框,如果是外国,我想把它改成文本框,这样就可以输入州/省。

我用PHP生成代码(例如states select和country select),我想输出select和textbox,最初隐藏和禁用textbox,然后如果用户更改country取消隐藏并启用textbox,隐藏和禁用select。

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

作为一个额外的问题,有更好的方法吗?

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

如w3:所示

设置后,禁用的属性对元素具有以下影响:

  • 禁用的控件无法获得焦点
  • 选项卡导航中将跳过禁用的控件
  • 禁用的控件无法成功

[…]

在本例中,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()
  }
})

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