单个类(没有其他选择器)的相关下拉列表(链接选择)

我试图用一种独特的方式创建多个依赖下拉列表(选择)。 我想限制选择器的使用,并希望通过在所有SELECT上使用单个类选择器来实现这一点; 通过弄清楚由其索引改变的SELECT 。 因此,改变的SELECT[i]将仅改变SELECT[i+1] (而不是像SELECT[i-1]那样的先前的改变)。

对于像这样的HTML:

  Volvo Saab Mercedes Audi      

除了第一个之外的SELECT将通过AJAX得到一些东西。

我看到以下Javascript给出了正确SELECT的正确值,而i的值也对应于正确的SELECT

 $(function() { $(".someclass").each(function(i) { $(this).change(function(x) { alert($(this).val() + i); }); }); }); 

请注意,我真的想要最小选择器方法。 我无法解决如何处理这个问题。 我应该使用数组吗? 就像SELECTS在arrays中存储所有SELECTS然后选择那些?

我相信,由于上面的代码已经通过了索引i ,所以应该有一种没有Arrays的方法。

谢谢你们。 AJ

更新:

这里有一些更好的描述:

  1. 页面上有超过2个`SELECT`s,类为`someclass`。 SELECT [0]最初有一些值,它的后继是空的,因为它们将根据它们各自的直接祖先的值而改变。
  2. 如果`SELECT [i]`有变化,它会触发一个事件,并且`SELECT [i + 1]`填充适当的`OPTION`。
  3. `SELECT [i + 2]`和其他后继者如果之前有任何数据则被重置。 因此,只有直接子项被填充,但重置了其他后继者。

我希望我表达得很好。 如果您需要更多关于我想要的内容,请告诉我。

编辑:更正版本。

 $(function() { var $all = $('.someclass'); // Reference all the selects var last = $('.someClass').length - 1; // Store index of last select $(".someclass").change(function() { var $th = $(this); // Reference the changed select var index = $all.index($th); // Grab the index of the changed select if(index != last) { // If the selected wasn't the last, var $next = $all.eq(index + 1) // reference the next select $all.filter(':gt(' + index + ')').empty(); // and empty all selects greater than the // index of the changed one. // This will include the one that is about // to be populated. // Then presumably perform some AJAX // based on $th.val(); to populate // $next with options. } }); }); 

change() ,您可以使用eq()函数获取下一个select元素。

 $('.someclass').eq(i + 1); 

或者(我认为更好),你也可以使用next()函数。

 $(this).next('.someclass');