单个类(没有其他选择器)的相关下拉列表(链接选择)
我试图用一种独特的方式创建多个依赖下拉列表(选择)。 我想限制选择器的使用,并希望通过在所有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
更新:
这里有一些更好的描述:
- 页面上有超过2个`SELECT`s,类为`someclass`。 SELECT [0]最初有一些值,它的后继是空的,因为它们将根据它们各自的直接祖先的值而改变。
- 如果`SELECT [i]`有变化,它会触发一个事件,并且`SELECT [i + 1]`填充适当的`OPTION`。
- `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');