2012-12-09 96 views
3

我手上有一个有趣的情况。也许它由于大脑放屁,因为我工作到很晚,但我有奇怪的事情发生在我身上有.index()jQuery .index()返回意外值

Here is a jsfiddle

的问题是,当一个选择框更改事件处理程序被触发,它试图找到当前选择框的索引。如果页面上的唯一元素是选择框,那么它返回的索引是正确的。如果还有其他元素,即使它们不是选择框,.index()似乎会返回一个基于页面上所有元素的索引,而不仅仅是$('select')元素。

这里是我的事件处理程序:

$('select').change(function() { 
     alert(
      '$(\'select\').length: ' + $('select').length + "\n" + 
      '$(\'select\').last().index(): ' + $('select').last().index() + "\n" + 
      '$(this).index(): ' + $(this).index()); 
    }); 

如果这是由于某种原因,正确的行为,someome可以解释为什么它是什么?

在此先感谢。

+0

+1大脑放屁,我从来没有听到这就够了。 – qooplmao

回答

0

index函数返回元素相对于直接父元素的从零开始的位置,默认情况下,标记名称无关紧要。使用.index("select")仅考虑select标签。

+0

当然,我应该意识到这一点。 – Jeff

+0

是的,它不会让我呢,说我必须等待4分钟 – Jeff

0

您必须在索引中指定选择器。

http://jsfiddle.net/Q5Lmy/1/

$(document).ready(function() { 
    $('select').change(function() { 
     alert(
      '$(\'select\').length: ' + $('select').length + "\n" + 
      '$(\'select\').last().index(): ' + $('select').last().index('select') + "\n" + 
      '$(this).index(): ' + $(this).index('select')); 
    }); 

}); 

http://api.jquery.com/index/