2014-08-27 31 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

相關問題