首先,我想說我對jQuery非常陌生,昨天剛剛開始,所以我對某些邏輯有些模糊,如果我不使用最佳實踐,請毫不猶豫地糾正我。顯示下拉菜單時填充下拉列表?
基本上就是我想要做的是:
- 我有幾個按鈕
- 當我點擊該按鈕中的一個,我會打開一個包含幾個元素一個div網頁(即不同根據按下的按鈕),在一些案件有,我想,當它的加載
我能正確處理按鈕和DIV裝載用Ajax來填充下拉列表
當我點擊按鈕,一個是創建HTML的一點點:
<div class='content'>
<select class='dropdown'></select>
</div>
這只是添加到文檔之後,我點擊了一個按鈕,它不存在擺在首位(基本上因爲不同的按鈕,將載入的內容DIV不同的東西)
我第一次在我的JS嘗試:
$('select.dropdown').load(function() {
alert('dropdown loaded');
});
這沒有工作,在所有的內華達州戒備呃出現了,無論我把這個小小的JS放在哪裏(我試圖在創建html之前先把它選中,我試着把它放在後面,不管我從來沒有得到警報)
所以我嘗試了ready函數:
$('select.dropdown').ready(function() {
alert('dropdown loaded');
});
而且工作。我用一個.post()替換了警報,看起來像這樣:
$('select.dropdown').ready(function() {
$.post("url.php", {arg: 'arg'}, function(data) {
$.each(data, function() {
$('select.dropdown').append("html stuff with <option>");
});
}, 'json');
而且運行良好。但事實是,現在我要填充只解僱了。就緒()事件選擇標籤,所以我試着用$(本):
$('select.dropdown').ready(function() {
$.post("url.php", {arg: 'arg'}, function(data) {
$.each(data, function() {
$(this).append("html stuff with <option>");
});
}, 'json');
並沒有奏效。如果我嘗試添加警報以查看「this」引用的內容:
$('select.dropdown').ready(function() {
alert($(this).attr('class'));
$.post("url.php", {arg: 'arg'}, function(data) {
$.each(data, function() {
$(this).append("html stuff with <option>");
});
}, 'json');
我得到「undefined」。
所以基本上我的問題是:
- 爲什麼。就緒()的作品,而不是.load()?
- 如何在.ready()函數中使用$(this)來引用啓動ready事件的下拉列表?
我想用$(本),而不是第一個解決方案的原因是因爲我會動態地添加其他下拉列表中,將使用相同的HTML標記和相同的JS代碼(如果可能的話),所以我有區分哪個下拉菜單啓動了準備好的事件。
有關如何做到這一點的任何想法/建議?
我從來沒有見過.ready()應用於元素,只有文檔。我的理解是,當DOM「準備就緒」時觸發它,這意味着它已被完全加載。 load()在文檔被加載時調用,但是在ready()之前作爲CSS並且可能沒有被應用。不過,我可能完全錯了。我有一個問題是,如果您是動態創建選擇,還是它已經存在於頁面上? – CodeChimp
我以爲.ready()適用於任何元素,但看起來你是對的,這就解釋了爲什麼我的$(this)無法正常工作。 至於select是動態創建的,我無法確定何時或如何綁定.load()函數才能正常工作。 – TheAthenA714