2016-03-12 85 views
1

的索引我有多个输入框与属性name="user[]"获取表单元素

当点击一个特定的输入,我需要在被点击了哪些指数user找出一个按钮。

我试过几种方法,如.index(),.attr('name"),但我找不到索引。

这怎么可能?

<div> 
    <input type="hidden" name="user[]"> <!-- index 0 --> 
    <button class="btn btn-primary"> 
</div> 
<div> 
    <input type="hidden" name="user[]"> <!-- index 1 --> 
    <button class="btn btn-primary"> 
</div> 
<div> 
    <input type="hidden" name="user[]"> <!-- index 2 --> 
    <button class="btn btn-primary"> 
</div> 
... 

新的div可以通过点击按钮添加。 这是用于用户邀请表,所以没有ID。

我需要的是这样的

$('button').on('click', function() { 
    var index = $(this).parent().children('input').getTheIndex(); 
    // where the index is defined by the use of [] 
}); 
+1

请发表您的代码 - HTML,CSS,jQuery的。 – Yass

+0

好吧,不要发布的CSS,因为它是无关紧要的。但请张贴您的html和javascript/jquery。 –

+0

已更改 –

回答

1

jQuery的.index()找到给定集合中元素的索引。

因此,name="user[]"输入中进行搜索,您首先需要找到所有的人:

var index = $(':text[name="user[]"]')...; 

然后,你可以判断当前输入的.index()其中:

var index = ...index(currentInput); 

实施例:

$('button').on('click', function() { 
 
    var allUsers = $('[name="user[]"]'); 
 

 
    var user = $(this).siblings('[name="user[]"]'); 
 
    var index = allUsers.index(user.get(0)); // get the native DOM node for the search 
 

 
    console.log(index); // 0, 1, ... 
 

 
    console.log(user.get(0) === allUsers.get(index)); // true 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div> 
 
    <input type="hidden" name="user[]"> <!-- index 0 --> 
 
    <button class="btn btn-primary">Test</button> 
 
</div> 
 
<div> 
 
    <input type="hidden" name="user[]"> <!-- index 1 --> 
 
    <button class="btn btn-primary">Test</button> 
 
</div> 
 
<div> 
 
    <input type="hidden" name="user[]"> <!-- index 2 --> 
 
    <button class="btn btn-primary">Test</button> 
 
</div>

0

我认为你需要设置data的该输入框的属性到像data-user-id=42所以你可以看看checked箱,并得到他们data属性。如果你想要的东西,如“所有表单元素内指数”比你需要像document.getElementById("form").elements在这里你可以寻找你输入...

1

如果每个按钮涉及到具体的隐藏元素,这将做到这一点:

var $users = $("input[type=hidden]"); 
    var $buttons = $(".btn-primary"); 
    $buttons.on("click", function(){ 

    // Get the index of the button, since it will match the 
    // index of the input 
    alert("Button index was: " + $buttons.index(this)); 

    // Get the index of the hidden element that comes just before the 
    // button that was clicked: 
    alert("Hidden index was: " + $users.index(this.previousElementSibling));  
    }); 

小提琴:https://jsfiddle.net/cvnwr89p/5/

顺便说一句,你需要关闭<button>元素。

0

你可以这样做:

$('.btn-primary').on('click', function() { 
    console.log($('.btn-primary').index($(this))) 
}); 
+0

真的吗?这是我在你前几分钟发布的确切答案。 –

+0

呃?你的回答不是我的答案是不同的 – BarthesSimpson

+0

我的答案已经发布了超过你的5分钟,我已经更新了我的答案,以便更全面,但是当你发布你的答案时,它几乎与我的一样。当你添加你的答案时没有看到灰色的条表示已经发布了新的答案,但是SO会以这种方式提醒你,所以你可以在你最终点击发布答案按钮之前检查新的内容 –