5

我正在尝试在屏幕外进行所有 dom 操作,然后使其可见。哪个有效,除了现在我有一种情况,我试图用一个表单来完成它,我想在浏览器上渲染它时专注于第一个输入文本。

类似的东西:myForm.prependTo(myDiv).show().find('input:first').focus();

问题是在表单完成渲染之前调用了焦点,这导致了可爱的错误“无法将焦点移动到控件,因为它是不可见的、未启用的或不接受焦点的类型'

其他 Web 开发人员如何处理在屏幕外操作元素然后使其可见的类似情况?我希望 jQuery 有类似的东西
myForm.prependTo(myDiv, function() { /* on render code here */ })

我知道这样做的一种方法是设置超时,当它触发时,我将注意力集中在输入上,但我觉得这并不是最干净的做事方式。我知道 iframe 有一个 onload 事件,所以我很好奇人们是否通常在一些隐藏的 iframe 中绘制他们的元素并监听它的加载事件以了解元素何时完成渲染?如果是这样,你能指出我这样做的一个例子吗?

4

2 回答 2

2
myForm.prependTo(myDiv).show(function(e){
    $(this).find('input:first').focus();
});​
于 2012-04-24T06:43:10.063 回答
1

我知道我迟到了 7 年,但我遇到了类似的问题,我通过将渲染后需要发生的事情放在准备好的处理程序中解决了这个问题。

我有一个有效的恢复功能,但是元素已恢复的视觉反馈为零或接近零。

我尝试先清空元素。它仍然有效,但视觉反馈仍然为零。

$("#someSelector").empty(); restore();

然后我发现 ready() 发生在渲染之后;所以我把它改成了......

$("#someSelector").empty().ready(function() { restore(); });

现在 restore() 直到 empty() 操作 RENDERS 之后才会发生。这意味着我的元素出现清空然后重新填充(它总是这样做,但现在用户可以看到它发生)。

几天前我以某种方式找到了这个解决方案,解决了一个我不记得的模糊搜索的不同问题。然后我再次需要它,但不记得我做了什么。现在我的搜索包括单词“jquery”和“render”并把我带到这里。

我最终通过我的代码找出我做了什么,我认为将它发布在这里可能是一个好主意,以防其他人偶然发现这篇文章并且实际上需要在渲染发生后执行某些事情。

干杯。

于 2019-09-04T04:54:37.213 回答