当name多次存在时检索<select>表单参数</select>

时间:2010-02-22 07:07:15

标签: javascript jquery html

我有一种情况,我有多个隐藏或显示的下拉列表,具体取决于具体情况。我将始终显示其中一个下拉列表。

例如,我可能会有这样的事情:

<select name="number">
  <option value="1">1</option>
  <option value="11">11</option>
</select>

<select name="number">
  <option value="2">2</option>
  <option value="22">22</option>
</select>

<select name="number">
  <option value="3">3</option>
  <option value="33">33</option>
</select>

根据具体情况,将显示其中一个下拉列表,而其他两个将被隐藏。假设显示第一个下拉列表,另外两个是隐藏的。在我的控制器中,我想检索未隐藏的下拉列表的选择值。我如何确保参数“number”的值是显示的值而不是其中一个隐藏的值?

我可以给每个选择元素一个不同的名称,但这需要幕后额外的逻辑。它可能是解决方案,但我只是好奇是否可以给所有三个选择元素指定相同的名称并仍然获得(可见)选定值。

4 个答案:

答案 0 :(得分:2)

您可以尝试使用jquery ....

您可以执行以下操作....

  1. 为所有选择元素指定相同的类名,例如class =“number”

  2. 然后使用jquery,您可以循环选择元素并找到未隐藏的值,如

     $('.number').each(function(){
     if($(this).css(display) != 'none'){
      var value = $(this).val();
     }   });
    
  3. 顺便说一下..我不认为在同名的表单中有多个元素是很好的编程习惯.. !!! :)

答案 1 :(得分:1)

您可以使用jquery eq(index)。

例如,要检索第一个选择的值,您可以使用:

var value1 = $('select').eq(0).val();

没有jquery,你可以这样做:

var sel = document.getElementsByTagName("select");
var value1 = sel[0].options[sel[0].selectedIndex].value;

无论如何,您应该使用不同的名称和ID重命名元素。

答案 2 :(得分:0)

一种方法是存储隐藏字段中显示的下拉框的名称,在提交时,您应该读取控制器中隐藏字段的值,实际上是下拉列表被展示了。

答案 3 :(得分:0)

起初,我还认为不应该有多个具有相同名称的输入字段,但是考虑了几秒钟之后,我意识到 - 在单选按钮和复选框的情况下 - 那里重复名称是一个很好的例子。

我还可以想到一些(复杂的)例子,说明为什么你想要几个同名的'select'元素。

在OP的情况下,假设在任何给定时刻只能看到一个“选择”,那么以下内容就可以完成......

var selectedValue = $("select:visible").val();

我会说,非常简单易记。

编辑: 为了防止隐藏的“选择”元素表单与表单一起发布,您还应该禁用它们。

更新: 其他答案建议给字段提供唯一的名称 - 这只会将您的问题移到服务器上,因为它现在需要决定哪个'select'值有效。禁用隐藏的将阻止它们被发布,但是服务器端代码仍然必须检查每个名称的存在以决定发布哪个名称。保持名称相同,并禁用隐藏元素将导致单个字段,发布一致的名称,使得服务端代码无需做出额外的决定。