如何使用jquery从动态生成的选中中获取选项的值

时间:2014-08-27 07:36:56

标签: jquery

我使用以下脚本生成选择

var opts = $.parseJSON(response);
$.each(opts, function(i, d) {
    if (i == 0) {
        $('#movie').append('<option value="' + d.movie_id + '" onclick="selectMovie(this.value)"selected>' + d.movie_name + '</option>');
    } else {
        $('#movie').append('<option value="' + d.movie_id + '" onclick="selectMovie(this.value)">' + d.movie_name + '</option>');
    }

});

但无法使用

获取默认值
$('#movie').val()

var tmp = document.getElementById('movie').value;

需要帮助

1 个答案:

答案 0 :(得分:1)

您正在异步接收数据,这是因为当您尝试访问该元素时,该元素不在DOM中。

您有两个选择:

a)使用aync: false作为选项,你的$ .ajax函数将允许你发出同步请求。完成ajax调用后,将执行JS。

b)更好的方法是使用ajax函数的success回调。当客户收到回复后,您可以使用上面的代码片段遍历它。

只需将$('#movie').val()放在成功回调中的每个循环后面。

如果它还没有工作,你必须告诉jQuery等待执行,直到.each循环完成。有时,通过在每个循环之后放置函数调用,无法访问由此创建的元素。

在这种情况下,您可以使用.promise(),如下所示:

$.each(opts, function(i, d) {
  if (i == 0) {
    $('#movie').append('<option value="' + d.movie_id + '"      onclick="selectMovie(this.value)"selected>' + d.movie_name + '</option>');
  } else {
    $('#movie').append('<option value="' + d.movie_id + '" onclick="selectMovie(this.value)">' + d.movie_name + '</option>');
  }
}).promise().done(function(){ $('#movie').val() });