省市区联级三级类目,省Provinces,市city 
$("#Provinces").val(str[7]);  //给省下拉框赋值
$("#Provinces").trigger("change");  //省下拉框执行onchange事件
$("#City").val(str[8]);  //给市下拉框赋值
运行结果:省正确(比如浙江),市可选择项正确(显示杭州、温州、金华),但选中项错误(第3行没执行的效果,还是显示第1个)
处理方案1:如果第2行和第3行之间加入一个alert();则运行正常。第三行的效果出现
处理方案2:第3行改成setTimeout (function (){ $("#City").val(str[8]);},1000); 延迟1秒执行,运行正常。第三行的效果出现
根据前2个处理方案结果说明:第2行还没执行结束,就执行第3行了。有什么办法等第2行运行结束后执行第3行。处理方案2不能确定第2行什么时候结束,有时延迟处理,有时没处理

解决方案 »

  1.   


    $("#Provinces").change(function(){$("#City").val(str[8]);});
    $("#Provinces").trigger("change"); //省下拉框执行onchange事件
      

  2.   

    不对的,$("#Provinces").change(function(){$("#City").val(str[8]);});这个是下拉框变动的时候才执行的,现在还没变动呢,
    $("#Provinces").trigger("change"); 这个才是下拉框变动的
    至少你的次序都错了
      

  3.   

    <html>
    <head>
        <title>testing</title>
        <script src="ec/jquery/jquery-1.3.2.min.js" type="text/javascript"></script>
        <script type="text/javascript">
            $(function () {
                $("#Provinces").change(function (e,cityValue) {
                    if ($(this).val() == "1") {
                        $("#City").html("<option value='1' >长沙</option><option value='2' >衡阳</option>");
                    } else {
                        $("#City").html("<option value='1' >武汉</option><option value='2' >襄阳</option>");
                    }
                    if (typeof (cityValue) != "undefined") {
                        $("#City").val(cityValue);
                    }
                });
            });
            function test() {
                $("#Provinces").val("2");
                $("#Provinces").trigger("change","2");
            }
        </script>
    </head>
    <body>
        省:
        <select id="Provinces" >
            <option value="1" >湖南</option>
            <option value="2" >湖北</option>
        </select><br />
        市:
        <select id="City">
            <option value="1" >长沙</option>
            <option value="2" >衡阳</option>
        </select><br />
        <input type="button" value="设置成湖北襄阳" onclick="test()" />
    </body>
    </html>这个已测试通过, 你试试看。 
      

  4.   

    有所启发,人家写的change事件,需要修改的很多,呵呵。
    再问个问题,
    $("#Provinces").trigger("change"); 
    $("#City").val(str[8]); 
    我的代码是不是第1行还没执行完的时候就执行第2行了?