我试图在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);
}
计时器有效。定时器不是一个安全的解决方案如果将超时设置得太短,则超时可能会过早触发,如果设置太长,用户必须等待。谢谢你的帮助。
答案 0 :(得分:0)
你能打电话给
吗?createInputAndFocus();
直接来自success()方法?否则,您可以尝试在选项中添加async = false,但这可能会降低性能。