2017-02-27 15 views
1

私は、ユーザーの選択に基づいて選択ボックスを動的にロードするコードをいくつか持っています。私は上記のコードでalert('hi');存在を持っている場合しかし、それだけで動作しますJavaScript/jQueryでDOMフォーカスを強制する方法はありますか?

//returns a string of <option>s by ID 
    $('#subtopic_id').load('ajax.php?f=newSubtopic&topic_id=' + id); 
    $('#subtopic_id').removeAttr('disabled'); 
    alert('hi'); 
    $('#subtopic_id').val(66); //forces SELECT box to show a specific option 

私はその内のコードを持っているので同じように選択される特定のオプションを指示します。 alert行を削除すると、選択を強制しようとする選択ボックス66が機能しないように見えます。

何が問題になる可能性がありますか?私は、alertが何らかの形で焦点をつかんだり、遅れを導入したり、次のラインを動作させる他の魔法をやっているとしか想像できません。

答えて

4

load()が非同期であるため、AJAX要求が完了してコンテンツがDOMに配置されたときに実行されるコールバック関数を提供する必要があります。それでは、あなたが必要とするのは、val()です。試してみてください:

$('#subtopic_id').load('ajax.php?f=newSubtopic&topic_id=' + id, function() { 
    $(this).prop('disabled', false).val('66'); 
}); 
+0

ありがとうございます!そうでなければ、リクエストは時間の経過とともに値の変更が完了していませんでしたか? – Dennis

+0

これは正しいです。あなたは基本的にピザを注文し、それが納品される前にそれを食べようとしていました。非同期コードでは、コールバックパターンを使用する必要があります。 –

関連する問題