2014-10-02 73 views
4

以下两页带有不同类的表单,但每个表单都有一个具有相同名称的输入。按表单索引和输入名称的jQuery选择器

<form class='first_form'> 
<input name='test' value='1' /> 
</form> 
<form class='second_form'> 
<input name='test' value='3'/> 
</form> 

我可以得到表单索引,我知道输入的名称,但我不知道输入的索引。

有没有办法链接选择器的形式索引和输入名称来获取值?

我试图链接,但似乎没有任何工作

var inputName = 'test'; 
Var formIndex = 1; 

$('*[name="' + inputName + '"]' +' ' + '$("form").eq(' + formIndex + ')').val(); 
+0

请检查小提琴 – 2014-10-02 15:52:02

回答

3

FIDDLE

var formIndex=0; 
var inputName="txtbox"; 
vall= $("form:eq("+ formIndex+") input[name= "+ inputName +" ]").val(); 
alert(vall); 

您的订单是错误的

+5

这甚至不是一个有效的选择器。 – Stryner 2014-10-02 15:32:25

+0

@Ninsly但它有两个投票:) – Regent 2014-10-02 15:34:07

+0

它应该是':eq',而'*'是不必要的。 – Regent 2014-10-02 15:34:59

2

未经检验的,但你可以这样做:

$('form:nth-of-type(1) input[name="test"]').val(); 
2
$("form:nth-child("+formIndex+") input[name='"+inputName+"']").val(); 
2

你可以在一个更聪明的方法做:

var fieldName = 'test'; 
var formId = '.first_form' 
$('form'+formId+' input[name='+fieldName+']).val() 

相反指标,使用命名选择,如ID或一类。这将有助于你在未来找到正确的形式(当你将有超过5,这将是很难计数女巫你正在看:)) 但这太复杂:)

我会建议是这样的:

document.forms[formIndex] 
document.forms[formName] 

然后可以参考输入元件通过使用name

var currentForm = $('form'+formId); 
currentForm//here you can put a log into console if element has not been found and find that bug sooner. 
currentForm.find('input[name='+fieldName+']').val() 
+0

Ech,更具体的方式:P但应该工作。其次,你缺少输入的类型。我认为这是文字。 – Beri 2014-10-02 15:33:12

+0

** formId ** ='**。first_form **' - 您确定将jQuery类选择器字符串设置为变量,其状态为ID,是好的还是聪明的? :) – Regent 2014-10-02 15:38:23

+0

我同意这是一个坏主意,但在这个例子中,类被添加到每个表单。所以我不想做太大的改变。现行身份证是识别身份的唯一正确方法。我的代码适用于两者 - 我只是想以另一种方式来解决这个问题,而不是索引.... – Beri 2014-10-02 15:58:54

2

您可以直接在DOM中使用以下任一访问形式的元件

document.forms[formIndex][inputName] 
document.forms[formName][inputName] 

然后,只需将它包装在$(...)中即可获得jQuery集合。在你的情况:

var inputName = 'test', 
    formIndex = 1; 

$(document.forms[formIndex][inputName]); 

我想这是迄今为止最高效的方式,它也是可读的。

要添加一点细节,document.formsHTMLFormElement的一个HTMLCollection在一个文档中。并给定任何HTMLCollectionHTMLFormElement您可以访问其中的命名元素作为属性。