2014-08-27 62 views
0

我使用产生选择如何从动态生成的选择使用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

你需要附加选项 – 2014-08-27 07:38:14

+0

后获得的价值是的,我需要追加 – 2014-08-27 07:38:41

+3

后,他的意思是,你只能尝试获取后,该值追加操作已完成。由于您的调用是异步的,您必须在回调中执行此操作,否则您需要使用承诺,以便在解决了ajax调用之前不要尝试执行此操作。 – kinakuta 2014-08-27 07:40:20

回答

1

您正在异步接收数据,这就是为什么当您尝试访问它时元素不在DOM中的原因。

你有2种选择:

a)使用aync: false作为一个选项insde您的$就功能将允许你做一个同步请求。 JS在ajax调用完成后执行。

b)更好的方法是使用ajax函数的回调函数success。当客户收到响应时,您可以使用上面的codesnippet循环访问它。

只需将$('#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() }); 
+0

感谢它的工作:) – 2014-08-27 08:00:26

+0

恕我直言,'async:false'通常是一个坏主意。它将阻止脚本执行并冻结浏览器,直到从远程服务器返回答复。 – Terry 2014-08-27 08:02:59

+0

我知道,这就是为什么我说这是一个选择,但另一个更好:P – gulty 2014-08-27 08:07:52

相关问题