为什么val()在jquery中为null

时间:2012-01-09 09:04:19

标签: jquery

我有以下脚本:     

 $(document).ready(function () {
     $("#dpProject").change(function () {
         var idModel = $(this).val();
         var select = $("#dpYear");
         select.empty();
         $.getJSON("/Project/GetYearsOfProject", { projectId: idModel }, function  (mahaleData) {
             var select = $("#dpYear");
             select.empty();
             $.each(mahaleData, function (index, itemData) {
                select.append($('<option/>', {
                    value: itemData.Value,
                    text: itemData.Text
                }));
            });//each
            });//json
        alert($('#dpYear :selected').html());


    });

为什么当我想提醒dpYear的所选项时它会提醒null? 即使我改为text(),它也返回null。 我使用了jquery-1.7.1.js。

修改 我有2个dropdonwns和一个文本框,当Dp1(dpProject)改变Dp2(DpYear)必须重新加载并且Dp2中的第一个项目被默认选中,并且在加载Dp2之后,一些方法必须调用并填充文本框,所以使用changin Dp1,text依赖于第一项Dp2 texbox必须更改,但选择的Dp2项目(dpYear)返回null。

2 个答案:

答案 0 :(得分:4)

getJSON是异步的。在你清空你的选择之后,它会在被叫之后立即返回。这意味着在调用警报时它仍然是空的。

如何访问所选值取决于您想要的 :在ajax请求完成后,根据您的代码,将没有选定的值。如果需要,您可以选择默认选择一个(如果列表非空并且您没有明确选择一个,AFAIK将默认选择第一个。)

更新:既然如此,在重新填充选择之后访问select的值似乎是要走的路:

     $.getJSON("/Project/GetYearsOfProject", { projectId: idModel }, function  (mahaleData) {
         var select = $("#dpYear");
         select.empty();
         $.each(mahaleData, function (index, itemData) {
            select.append($('<option/>', {
                value: itemData.Value,
                text: itemData.Text
            }));
         });//each
         alert($('#dpYear').val()); # If mahaleData is non-empty, this should be non-null
      });//json

答案 1 :(得分:0)

我必须使用隐藏字段,在更改第一个Dp时,我必须将所选值设置为隐藏字段,我不知道为什么但是在第一次调用时,由val()返回的始终选择值为空。