既知の値を持つドロップダウン・リストがあります。私がやろうとしていることは、jQueryを使ってドロップダウンリストに存在することがわかっている特定の値を設定することです。 通常のJavaScriptであれば、次のようにします。
ddl = document.getElementById("ID of element goes here");
ddl.value = 2; // 2 being the value I want to set it too.
しかし、私はセレクタにCSSクラスを使用しているので、jQueryでこれを行う必要があります(愚かなASP.NETクライアントID...)。
私が試したものは以下の通りです。
$("._statusDDL").val(2); // Doesn't find 2 as a value.
$("._statusDDL").children("option").val(2) // Also failed.
jQueryではどうすればいいのでしょうか?
**更新してください。
結果的には、最初からうまくいっていたわけです。
$("._statusDDL").val(2);
すぐ上にアラートを置くとうまくいくのですが、アラートを外して全速力で走らせると、エラーが出ます。
選択されたプロパティを設定できませんでした。無効なインデックス
jQueryのバグなのか、Internet Explorer 6のバグなのかはわかりませんが(Internet Explorer 6だと思います)、ひどく腹立たしい現象です。
jQueryのドキュメントの状態です。
jQuery.val]は、値のセットにマッチするすべてのラジオボタン、チェックボックス、および選択オプションをチェック、または***選択します。
この動作は jQuery
のバージョン 1.2
以降に搭載されています。
ほとんどの場合、これが必要です。
$("._statusDDL").val('2');
ドロップダウンリストへの値のロードや、選択する値の決定はどのように行っていますか?もしAjaxを使用しているのであれば、選択が行われる前に遅延が必要な理由は、問題の行が実行された時点で値がロードされていなかったからかもしれません。 これは、ステータスを設定する前に警告文を行に記述したときに動作した理由にもなります。なぜなら、警告アクションはデータがロードされるのに十分な遅延を与えるからです。
jQueryのAjaxメソッドを使用している場合は、コールバック関数を指定して、$("._statusDDL").val(2);
をコールバック関数の中に入れることができます。
これにより、たとえ300 ms以上かかったとしても、データの準備ができた時点でメソッドが実行されたことを確認できるため、より確実に問題を処理することができます。