我想使用jQuery的get函數來填充選擇(基於CF組件中的SQL查詢的結果)。填充工作正常,但是接下來我想在選擇填充後選擇正確的選項。嘗試使用done(),但似乎並不奏效。示例代碼:如何使用jQuery獲取select,然後設置select的值?
function fChangeSelect() {
var txOutcomeSelect = ('#someSelect');
$.get("#request.webroot#cfc/assessment.cfc?method=getEncCatChildrenRemote&encCatIdList=" + encCatIdList,
function(jsonText){
var qryTxOutcomes = JSON.parse(jsonText);
//qryTxOutcomes is now an object with 2 arrays: COLUMNS and DATA.
//COLUMNS is an array of strings of the column names.
//DATA is an array of arrays, where each array is a row.
//Thus, every data cell is DATA[rownumber][columnnumber]
txOutcomeSelect.empty();
txOutcomeSelect.append('<option value="">--Select an Outcome--</option>');
$.each(qryTxOutcomes.DATA, function() {
txOutcomeSelect.append('<option value=' + $(this)[5] + '>' + $(this)[3] + '</option>');
});
}
).done(function(){
txOutcomeSelect.val('123');//does nothing, because select isn't populated yet.
alert('txOutcomeSelect should be populated by now, but its not. It only populated after I click OK on this alert.');
});
}
(更新)顯然它與ajax的時間無關。對於測試,我放入一個按鈕,該按鈕顯示帶有選項數量選項的警報。我等待頁面加載並選擇填充,然後單擊該按鈕,並且警報以「0」返回。因此,儘管select使用append()填充,並且選項在屏幕上可見,但jQuery仍然認爲select是空的。
嘗試在與'$ .each()'循環之後追加所有選項的代碼相同的回調中調用'.val()'的代碼。我不知道是否可以保證當你使用這樣的兩個完成函數時它會先運行。 – Barmar
我想我找到了答案 - http://stackoverflow.com/questions/31395944/using-jquery-append-to-add-option-values-into-a-select-element-not-working。 Append()會添加到select的innerHTML中,但爲了使DOM正確拾取它,它必須按照此鏈接上的說明完成。 – Cmaso
你在這裏缺少'$':'var txOutcomeSelect =('#someSelect')'它應該是'$('#someSelect')'。這是一個複製錯誤還是在真實的代碼? – Barmar