Javascript 呈现元素时的jquery事件

Javascript 呈现元素时的jquery事件,javascript,jquery,html,Javascript,Jquery,Html,我试图在屏幕外执行所有dom操作,然后使其可见。这是可行的,但现在我遇到了这样的情况,我正试图使用一个表单,在浏览器上呈现第一个输入文本时,我希望将注意力集中在该表单上。 类似于:myForm.prependTo(myDiv.show().find('input:first').focus() 问题是在窗体完成渲染之前调用了焦点,这导致了可爱的错误“无法将焦点移动到控件,因为它不可见、未启用或类型不接受焦点” 其他web开发人员如何处理在屏幕外操纵元素然后使其可见的类似情况?我希望jQue

我试图在屏幕外执行所有dom操作,然后使其可见。这是可行的,但现在我遇到了这样的情况,我正试图使用一个表单,在浏览器上呈现第一个输入文本时,我希望将注意力集中在该表单上。

类似于:
myForm.prependTo(myDiv.show().find('input:first').focus()


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

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



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

我知道我迟到了7年,但我有一个类似的问题,我通过将渲染后需要发生的事情放入一个就绪的处理程序来解决

myForm.prependTo(myDiv).show(function(e){
    $(this).find('input:first').focus();
});​
我有一个恢复功能可以工作,但是有零或接近零的视觉反馈表明元素已经恢复

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

$(“#someSelector”).empty();
恢复()

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

$(“#someSelector”).empty().ready(函数()){
恢复();
});

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

几天前,我不知何故为一个不同的问题找到了这个解决方案,其中有一些模糊的搜索,我记不得了。然后我又需要它,但记不清我做了什么。现在,我的搜索包括单词“jquery”和“render”,并将我带到这里

最后,我通过我的代码来了解我做了什么,我认为在这里发布它可能是一个好主意,以防其他人无意中发现这篇文章,并在渲染发生后实际需要执行某些操作


干杯。

在表单显示后,您不能直接呼叫
.focus
有什么原因吗?正如我前面所说,我收到了“无法移动焦点…”错误。这是因为在浏览器仍在呈现表单时调用了焦点。基本上,浏览器会说“嘿,你不能在元素上设置焦点,它不可见”。好吧,我的印象是,
myDiv
也要晚些时候才会显示。你在屏幕外到底在做什么?如果您没有意识到,大多数DOM操作不会在代码运行时实时发生。浏览器倾向于将操作排队,然后在JS完成执行后重新布局页面。之后,我将其移动到一个空的中间div,然后使其可见(使用.show()),然后将焦点放在第一个输入字段上。没有什么特别的。FYI
.show()
是同步的,因此您不需要对其使用完成函数。函数本身可能是同步的,但浏览器的绘制必须是异步的,因为如果不是同步的,我就不会有问题:)我想知道的是如何知道浏览器何时完成渲染。一个便宜的技巧是使用计时器,但我真的认为这不是应该做的方式。