jquery设置选择选项;不适用于动态添加的选项,但适用于静态选项

时间:2011-01-28 15:40:00

标签: javascript jquery asp.net-mvc-3

以下是我正确填充选择列表的内容:

            <select id="countriesList">
                <option value="0"> -- select country -- </option>
                <option value="500"> 500 </option>
            </select>

            <script type="text/javascript">
                $(function () {
                    // load the countries list
                    $.getJSON(
                        "/StaticData/GetAllCountries/",
                        function (countries) {
                            // iterate each returned country and add it to the countries select list.
                            $.each(countries, function (i, country) {
                                $("#countriesList").append("<option value='" + country.Id + "'>" + country.Description + "</option>");
                            });
                        });

                    // set the selected country based on the model's delivered CountryId value
                    $('#countriesList').val(500);
                });
            </script>

填充效果很好,但是在脚本添加的其中一个选项元素上调用.val()并没有选中它,但作为一个例子,静态定义的选项“500”在我调用.val时工作正常( )就此而言。

我对jquery很新,但不是编程,因为我进入了浏览器编程。任何提示都会有用。你还需要什么?

此脚本代码直接位于表td标记内,因此填充了select并在表单呈现时进行设置。

3 个答案:

答案 0 :(得分:3)

尝试手动完成。

var select = document.getElementBydId("countriesList");
for (var i  = 0; i < select.options.length; i++) {
    if (select.options[i].value === "500") {
        select.selectedIndex = i;
    }
}

等待。问题是你在执行AJAX时是异步并且有回调

所以执行顺序是:

  • 的getJSON
  • setval on select
  • 添加要选择的选项。

所以将$("#countriesList").val(500)添加到回调函数的末尾

答案 1 :(得分:1)

如果您尝试从示例.val(500)的同一位置选择它,那么您将永远无法获得有效的结果。 AJAX调用是异步进行的,并在.val(500)已经执行后填充信息。

在ajax调用的return函数中移动你的select,它应该可以正常工作。

答案 2 :(得分:0)

您可能需要使用livequery插件...

http://docs.jquery.com/Plugins/livequery