2

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

<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()s 中的任何一个对我来说都是可以接受的:

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

我的代码不起作用是:

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

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

预计当用户更改任何Quantity文本框时,val()会提醒文本框及其正确的index(). 我们看到val()输出正确,但index()总是返回0

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

奇怪的是,正如我所研究的那样,两者val()都是index()jQuery 功能。如果val()是 javascript 基础,则可以接受。但是现在,一个 jquery Base 函数起作用了,而另一个不起作用!

4

2 回答 2

7

.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/

First off ids 应该是唯一的,因此我将它们更改为类并更新了change事件的选择器。

我也有.index()工作:

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

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

于 2013-06-25T15:50:00.290 回答
2

这得到了两个:

 $('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]')

于 2013-06-25T15:50:31.097 回答