【问题标题】:Is there a way to force DOM focus in JavaScript/jQuery?有没有办法在 JavaScript/jQuery 中强制 DOM 焦点?
【发布时间】:2017-02-27 16:47:58
【问题描述】:

我有一些代码可以根据用户选择动态加载选择框。

我在里面有代码指示选择一个特定的选项,如下所示:

    //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 以某种方式抓住了焦点,或者可能会引入延迟或做一些其他魔法来使下一行工作。

【问题讨论】:

    标签: javascript jquery ajax asynchronous race-condition


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢,这行得通!所以否则请求没有及时完成值更改?
    • 没错。您基本上是在订购比萨饼并尝试在交付之前将其吃掉。使用异步代码,您必须使用回调模式。
    猜你喜欢
    • 1970-01-01
    • 2017-01-22
    • 1970-01-01
    • 2014-10-15
    • 2011-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-17
    相关资源
    最近更新 更多