2009-11-18 75 views
4

我想通过表单中的某些元素(无线电,文本框和选择框)循环并从每个元素中获取值。我正在循环每个元素的名称(我不认为我可以使用ID,因为一组单选按钮都有不同的ID,但都具有相同的名称)。在jQuery中,如何通过name属性选择不同的元素?

这里是2个的选择器包括所有我所需要的元素:

$("input[name=" + prop + "]") 
$("select[name=" + prop + "]") 

其中丙是循环迭代器。

我想在这两个选择执行相同的操作,所以我试图将它们结合起来:

$("input[name=" + prop + "]", "select[name=" + prop + "]") 

但没有奏效。

有没有办法在一个选择器中同时搜索输入元素和选择元素?

谢谢!

回答

10

你只有一个小错误:你申报的两个选择为两个不同的参数,而不是用逗号一个参数作为选择的一部分:

$("input[name=" + prop + "], select[name=" + prop + "]") 

你写的方式使用的元素第二个选择器参数作为第一个选择器参数解析的上下文。

+0

哇 - 我完全看到我做错了什么。我已经复制并粘贴了2个选择器来创建1个选择器,并且我完全搞乱了我的引用布局。感谢您的支持! – BrianH

+1

您可能还想添加'textarea',并且可以设想'button'。 – bobince

5

如果逗号包含在选择器字符串中,它将起作用。你也可以做

$("input, select").filter("[name=" + prop + "]") 

它消除了两次写“[name =”+ prop +“]”。

4

不要试图对你在jQuery中所做的一切事情进行讨论。 DOM 1级HTML标准为您提供了HTMLFormElement.elements,这很容易,快速,并且不会像name中的异常字符那样失败,就像选择器字符串一样。

<form id="x" ...> 
    <input type="text" name="foo" /> 
    <select name="foo"></select> 
</form> 

<script type="text/javascript"> 
    var prop= 'foo'; 
    var form= $('#x')[0]; 
    var foos= form.elements[prop]; 
    alert(foos.length+' '+foos[0].type+' '+foos[1].type); // 2 text select-one 
</script> 
+0

这是一个很好的提示 - 实际上,我陷入了这个陷阱。很好退后一步,记住jQuery写入的语言。 – BrianH

+0

作为奖励,这将会捕获其他不是输入或选择的表单字段(如textarea),以防表单在某处向下改变路。 – keithjgrant

相关问题