Jquery ajax:获得焦点后,新的输入字段失去焦点

时间:2016-01-10 20:28:56

标签: jquery ajax focus lost-focus

我试图在ajax更新期间专注于新创建的输入元素,但焦点会以某种方式丢失。

       var options = {
            url: aURL,
            type: "POST",                
            dataType: "xml",
            data: params,         
            success: function(responseData, status, xhr) {
                // replace DOM element
                $(".placeholder").html(responseData);
            }
        };

        $.ajax(options);

在responseData中,有一个脚本

<script>$(function(){createInputAndFocus();});</script>

该脚本将在ajax DOM更新期间执行。

function createInputAndFocus() {
     $(".placeholder").append('<input type="text" id="foo"/>');
     $(".placeholder").find("#foo").focus();

     // debug: check if it is focused
     console.log("active element: " + document.activeElement.id);
}

从浏览器控制台,聚焦创建的输入(foo)。但是在完成ajax之后,屏幕上没有聚焦(突出显示)。从控制台,验证它没有集中。 document.activeElement与ajax update之前的那个相同。

Jquery在ajax之后恢复原始焦点吗? ajax更新后如何关注新的输入元素?我试图设置一个计时器

function createInputAndFocus() {
         $(".placeholder").append('<input type="text" id="foo"/>');
         $(".placeholder").find("#foo").focus();

         setTimeout(function() {$(".placeholder").find("#foo").focus();}, 3000);
    }

计时器有效。定时器不是一个安全的解决方案如果将超时设置得太短,则超时可能会过早触发,如果设置太长,用户必须等待。谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

你能打电话给

吗?
createInputAndFocus();

直接来自success()方法?否则,您可以尝试在选项中添加async = false,但这可能会降低性能。