如何使用jquery从输入文本数组中检测当前输入文本的索引

Moh*_*aji 2 javascript arrays jquery jquery-selectors

我有一个简化的输入文本框数组如下:

<input type="text" name="quantity[3]" value="0">
<input type="text" name="quantity[6]" value="0">
<input type="text" name="quantity[7]" value="0">
<input type="text" name="quantity[11]" value="0">
Run Code Online (Sandbox Code Playgroud)

这两种方式中的任何一种对我来说都是可以接受的,但我不知道如何做其中一种:

当第3个输入框(有索引7)改变时,两个alert()s中的任何一个都可以接受:

  • 7(因为第3个文本框的真实索引是7)
  • 2(因为它可能从0开始计算,因此它的索引将是2)

我的代码不起作用是:

$(document).ready(function(){
    $('input[name^=quantity]').change(function(){
        alert($(this).index());
    });
})
Run Code Online (Sandbox Code Playgroud)

链接:http://niamco.com/cp/problem.html

当用户更改任何数量文本框时,预计文本框会val()被警告以及它们是正确的index().我们看到val()输出正确,但index()总是返回0.

由于这val()是正确的,我们应该确保jQuery加载良好并且正常工作.那为什么不应该index()是真的呢?

奇怪的是,我已经研究,无论是val()index()是jQuery的功能.如果val()是javascript基础,它可以被接受.但是现在,一个jquery Base函数可以工作,而另一个则没有!

Joe*_*Joe 7

.index()获取元素相对于其兄弟姐妹的当前位置.您应该使用正则表达式来获取输入名称之间[和之间的数字].

请改用:

$('input[name^=quantity]').change(function () {
    var index = $(this).prop('name').match(/\[(.*?)\]/)[1];
    console.log(index);
});
Run Code Online (Sandbox Code Playgroud)

这是工作:http://jsfiddle.net/u8HRq/1/

更新:根据您的更新,这是一个工作小提琴:http://jsfiddle.net/qbmAU/2/

首先id应该是唯一的,所以我已经将它们更改为类并更新了change事件的选择器.

我也有.index()工作:

$(this).index('.quantity')
Run Code Online (Sandbox Code Playgroud)

index()通常通过返回相对于匹配兄弟姐妹的位置来工作,这就是我和j08691的答案正常工作的原因.但是,如果元素不是兄弟元素,那么您可以将选择器作为参数传递.这将返回index当前元素相对于匹配元素的值.