在表单提交后将焦点设置回原位(javascript)

Set focus back after form submit (javascript)

本文关键字:javascript 设置 表单提交 焦点      更新时间:2024-05-18

我的表单上有一些输入字段需要在更改时提交。当它们被提交时,我失去了焦点。我想把注意力重新放在我的投入上。我想用

Event.observe(document, 'dom:loaded', $('" + focusedFieldId + "').focus());

其中focusedFieldId是已更改元素的id。有时它工作得很好,但有时我的输入值为空。当我将focusedFieldId更改为其他字段id时,它运行良好(它设置值,然后专注于字段)。问题是只有当我试图将焦点放回相同的输入时。一个重要的问题是:在值更改后,会触发一些javascript(http://www.devbridge.com/projects/autocomplete/prototype/)。在这个javascript表单提交之后,我想把焦点放回原处。我想,当dom被加载时,意味着提交结束,页面被重新加载,我已经准备好把焦点放回原处了。我在哪里犯错误?

我相信你在这里陷入了某种竞赛状态。使用prototype.js 可以观察到两个主要的、不同的"onLoad"事件

其中一个是你刚才在这里使用的:

document.observe("dom:loaded", function() { ... });

另一种是

Event.observe(window, "load", function() { ... });

浏览器加载DOM(读取:HTML)后,将立即执行第一个,加载所有内容后,将执行第二个

如果你在上面的脚本中设置focusedFieldId,我强烈建议你使用第二个事件观察员;即使速度较慢,它也会确保解析之前的脚本。

不过,这仍然是一个设计缺陷。我强烈建议您将所有屏幕控制器逻辑(包括变量asignment)放在第一个onLoad事件中,以更快地执行,并避免像这样的潜在竞争条件。