我有3个顺序或下属下拉菜单,可以由用户选择(工作正常),或者在某些情况下,需要通过js选择。
我设置了一个超时,为js填充第一个下拉列表的时间,然后才能在序列中选择选项。否则它不起作用。
问题在于,在setTimeout经过的时间内,var“i”被添加了一个,这会抛出脚本。
如果在我只有一个输入要考虑的情况下强制“i”等于零,这将正常工作。由于这是动态的,我不能这样做,我正在寻找阻止这种行为的方法。
以下代码在第二个下拉菜单处停止。
在这种情况下,setTimeout是一个很好的解决方案吗? 感谢。
$( document ).ready(function() {
var ctvid = <?php echo $ctvid ;?>;
if(ctvid !=""){
var info = <?php echo json_encode ($info);?>;
for (var i=0;i<ctvid;i++){
$('#brand' + i).val(info['brand_id'][i]).change();
setTimeout(function(){
$('#model' + i).val(info['model_id'][i]).change();
},500);
}
}
});
答案 0 :(得分:1)
i
里面的setTimeout
没有被捕获,你需要在自动执行匿名函数中手工创建一个闭包来创建一个闭包:
for (var i=0; i<ctvid; i++) {
(function(i) {
setTimeout(function() {
$('#model' + i).val(info['model_id'][i]).change();
},500);
})(i);
}
代码中的 i
始终是每个元素的最后一个值。 Example fiddle here
答案 1 :(得分:0)
最好避免为这种情况使用时间,因为缓慢的连接很容易破坏它。在我看来,在“自动”情况下最好在元素(例如正文)上设置数据属性,您可以检查选择群体的完整功能。
澄清:
在functionB()
上,您根据selectA的选择使用元素填充selectB。在该功能中,检查是否设置了某些内容。如果是这样,使用它来选择刚刚填充的selectB中的项目,触发selectC填充。