如何检测当前输入文本'使用jquery从输入文本数组中获取s索引

How to detect current input-text's index from an array of input-text with jquery

本文关键字:输入 文本 jquery 使用 数组 索引 获取 何检测 检测      更新时间:2023-09-26

我有一组输入文本框,简化如下:

<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">

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

当第三个输入框(索引为7)更改时,两个alert()中的任何一个对我来说都是可接受的:

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

我的代码不起作用是:

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

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

预计当用户更改数量文本框中的任何一个时,都会提醒文本框的val()及其正确的index()。我们看到val()被正确输出,但index()总是返回0

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

奇怪的是,正如我所研究的,val()index()都是jQuery功能。如果val()是javascript基础,那么它是可以接受的。但是现在,一个jqueryBase函数可以工作,而另一个则不行!

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

使用这个替代:

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

它在这里工作:http://jsfiddle.net/u8HRq/1/

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

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

我也有.index()工作:

$(this).index('.quantity')

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

这将同时获得:

 $('input[name^=quantity]').change(function () {
     console.log($(this).index(), +$(this).prop('name').match(/'d+/g));
 });

jsFiddle示例

$(this).index()是真正的索引

+$(this).prop('name').match(/'d+/g)是来自属性的索引


更新:在你更新了你的问题以显示你真正使用的代码后,这应该会对你有所帮助:

$('input[name^=quantity]').change(function () {
    console.log($(this).closest('table').find('input[name^=quantity]').index($(this)), +$(this).prop('name').match(/'d+/g));
});

+$(this).prop('name').match(/'d+/g)仍然可以从属性中获取索引

$(this).closest('table').find('input[name^=quantity]').index($(this)),但您需要使用.index()来获得输入元素的索引,因为它们不是彼此的兄弟。您需要为要与之进行比较的元素集合传递一个参数,在本例中为$(this).closest('table').find('input[name^=quantity]')