私はjQueryのget関数を使ってselect(CFコンポーネントのSQLクエリの結果に基づいて)を生成しようとしています。ポピュレーションはうまく動作しますが、セレクトがポピュレートされた後に正しいオプションを選択したいと思います。 done()を使って試しましたが、うまくいかないようです。例コード:jQueryでselectを生成するにはget、次に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()'を呼び出すコードを入れてみてください。このような2つの補完関数を使用するときに最初に実行されることが保証されているかどうかはわかりません。 – 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