我使用以下脚本生成选择
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;
需要帮助
答案 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() });