2017-02-27 97 views
1

我有一些基於用戶選擇動態加載選擇框的代碼。有沒有辦法在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('hi');存在於上面的代碼它僅適用。當我刪除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

這是正確的。你基本上是點了一份披薩,然後在它交付之前嘗試吃。使用異步代碼,您必須使用回調模式。 –

相關問題