2

我有 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); 
    }   
    }
});
4

2 回答 2

1

内部没有被捕获isetTimeout闭包中,您需要通过将其手动包装在自执行匿名函数中来创建闭包:

for (var i=0; i<ctvid; i++) {
    (function(i) {
        setTimeout(function() {
            $('#model' + i).val(info['model_id'][i]).change(); 
        },500); 
    })(i);
}

在您的代码i中始终具有每个元素的最后一个值。示例小提琴在这里

于 2013-03-28T15:27:32.850 回答
0

最好避免在这种情况下使用时间,因为慢速连接很容易破坏它。我认为,在“自动”情况下,最好在元素(例如 body )上设置数据属性,您可以检查选择群体的完整功能。

澄清:

根据functionB()selectA 的选择,用元素填充 selectB。在该函数中,检查是否设置了某些内容。如果是这样,请使用它来选择您刚刚填充的 selectB 中的项目,从而触发 selectC 填充。

于 2013-03-28T15:19:46.620 回答