如果禁用了两个表单输入,那么它们的名称是否相同?

时间:2013-09-03 01:59:52

标签: javascript html forms

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

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

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

作为奖励问题,有更好的方法吗?

2 个答案:

答案 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()
  }
})

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