問題:
2つのドロップダウンがあります。どちらもデータベースからの情報で入力され、いくつかの初期情報(phpで作成されたjson配列)に依存しています。2番目のドロップダウンも、最初のドロップダウンで選択されたものによって異なります。2番目のドロップダウンが選択されると、ユーザーの選択は別のデータベーステーブルに保存されます。ユーザーが離れてから戻ってきた場合、ドロップダウンを以前に選択したものにリセットできるようにしたいです(ただし、ユーザーが選択を変更できるようにします)。
コンテクスト:
次のようなコードがあります。
function eventHandler2(event) {
$.ajax({
url: "someotherurl.php",
data: event.data["context"],
success: function(data) {
// Do some stuff
}
});
}
function eventHandler1(event) {
event.data["context"][$(event.target).id()] = $(event.target).val();
$.ajax({
url: "someurl.php",
data: event.data["context"],
success: function(data) {
$("#element").append(build_input("input2", data));
$("#element input2").change({"context": event.data["context"]}, eventHandler2);
}
});
}
$(document).ready(function() {
var context = // php generated json array.
$("#element").append(build_input("input1", context));
$("#element input1").change({"context": context}, eventHandler1);
});
context
イベントハンドラーの外部で初期化する必要があり、durringイベントに追加されるデータが含まれ、またはbuild_input
で決定されるオプションで構築されたフォーム入力要素のhtml文字列を返すだけです。eventHandler1(およびeventHandler2)を含むhtml要素全体が削除され、再初期化される場合があります。data
someData
私の問題は、データベースから取得したデフォルト値を使用して2つのフォーム入力(build_inputを使用して構築)を初期化したいのですが、これらの値が設定されたら、再初期化やイベント処理でこれらの初期値を使用したくないということです(イベントハンドラをバインドするときにそのオブジェクトが使用されるため、コンテキストオブジェクトへの追加が困難になります)。
入力の値を設定してから変更イベントを呼び出して、ユーザーがそれらの値を選択することをシミュレートしたいのですが、入力要素はajaxデータを使用して構築されているため、これらの変更イベントはajaxリクエストが返され構築される前に呼び出されます入力要素。
タイムアウトでこれを解決することはできますが、javascriptの実行が異なるマシンで遅くなる可能性があり、ajax呼び出しに通常よりも時間がかかる可能性があるため、そのようにする予定はありません。それでも、理想的には次のようなものが欲しいです。
$("#element .input1 option[value='" + initial_value + "']").attr('selected', true);
$("#element .input1").change();
ページが読み込まれたときに呼び出されますが、要素がビルドされてバインドされた後にのみ呼び出されます。
質問:
ページが最初にロードされたとき、およびhtml入力要素を構築するためのajaxリクエストが返された後にのみ、変更イベントをトリガーする(ユーザーがオプションを選択することをシミュレートする)方法はありますか?