有没有办法在JavaScript/jQuery中强制使用DOM焦点?

有没有办法在JavaScript/jQuery中强制使用DOM焦点?,javascript,jquery,ajax,asynchronous,race-condition,Javascript,Jquery,Ajax,Asynchronous,Race Condition,我有一些基于用户选择动态加载选择框的代码 我的内部代码指示选择特定选项,如下所示: //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').va

我有一些基于用户选择动态加载选择框的代码

我的内部代码指示选择特定选项,如下所示:

    //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
//按ID返回一个s字符串
$('#subtopic_id').load('ajax.php?f=newSubtopic&topic_id='+id);
$(“#子主题_id”).removeAttr('disabled');
警报(“hi”);
$('u#subtopic_id').val(66)//强制选择框显示特定选项
但是,它只在我有
alert('hi')时才起作用出现在上述代码中。当我删除
警报
行时,尝试强制选择66的选择框似乎不起作用


出了什么问题?我只能想象,
alert
以某种方式抓住了焦点,或者可能引入了延迟,或者执行了其他一些使下一行工作的魔法。

问题在于
load()
是异步的,因此,您需要提供一个回调函数,以便在AJAX请求完成并且内容已放置在DOM中时执行。只有这样,您才能设置所需的
val()
。试试这个:

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

问题是因为
load()
是异步的,因此您需要提供一个回调函数,在AJAX请求完成并且内容已放置在DOM中时执行。只有这样,您才能设置所需的
val()
。试试这个:

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

谢谢,行得通!那么,如果不是这样,请求就没有及时完成值更改?这是正确的。你基本上是在订购比萨饼,并试图在它送到之前吃掉它。对于异步代码,您必须使用回调模式。谢谢,这很有效!那么,如果不是这样,请求就没有及时完成值更改?这是正确的。你基本上是在订购比萨饼,并试图在它送到之前吃掉它。对于异步代码,您必须使用回调模式。