0

我的表单上有一些需要提交更改的输入字段。当他们提交时,我失去了焦点。我想让我的注意力重新回到我的输入上。我想用那个:

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

其中focusedFieldId 是更改元素的ID。有时它工作正常,但有时我的输入中有空值。当我将focusedFieldId 更改为其他字段ID 时,它可以正常工作(它设置值然后专注于字段)。问题只是当我尝试将焦点重新设置在相同的输入上时。一个重要问题:在值更改后触发一些 javascript (http://www.devbridge.com/projects/autocomplete/prototype/)。提交此 javascript 表单后,我想重新设置焦点。我认为当 dom 被加载时,这意味着提交结束,页面被重新加载,我准备好重新设置焦点。我在哪里犯错?

4

1 回答 1

0

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

其中之一就是您刚刚在这里使用的:

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

另一个是

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

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

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

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

于 2013-05-03T21:28:23.173 回答