我的表单上有一些输入字段需要在更改时提交。当他们提交时,我失去了焦点。我想把重点放在我的投入上。我想用它:
Event.observe(document, 'dom:loaded', $('" + focusedFieldId + "').focus());
其中focusedFieldId是已更改元素的id。有时它工作正常,但有时我的输入中有空值。当我将focusedFieldId更改为其他字段ID时,它可以正常工作(它设置值然后专注于字段)。问题是当我尝试将焦点设置回相同的输入时。一个重要问题:价值变化后,一些javascript被解雇(http://www.devbridge.com/projects/autocomplete/prototype/)。提交此javascript表单后,我想重新设置焦点。我认为当dom加载时意味着提交结束,页面重新加载,我准备好重新设置焦点。我在哪里弄错了?
答案 0 :(得分:0)
我相信你在这里陷入某种竞争状态。 您可以使用prototype.js
观察两个主要的,不同的“onLoad”事件其中一个是您刚才使用的:
document.observe("dom:loaded", function() { ... });
另一个是
Event.observe(window, "load", function() { ... });
第一个一个将在浏览器加载 DOM(读取:HTML)后立即执行,第二个时强大>一切都已加载。
如果您在某个脚本中设置focusedFieldId
,我强烈建议您选择第二个事件观察员;即使速度较慢,也会确保解析以前的脚本。
这仍然是一个设计缺陷。我强烈建议你在第一个onLoad事件中加入所有屏幕控制器逻辑(包括变量asignment),以便更快地执行,并避免像这样的潜在竞争条件。