背景
我有一个窗体有很多文本输入(<input type="text" />
)。上页面加载,我通过表单循环,并为每一个JS对象变量,保存方法,诸如验证和性能如原始值,电流格式化值,验证要求,等:我可以从HTML元素获得现有的JS元素
field = new Field(wrapperElements[i]);
当输入已激活blur
事件,我在该字段上运行验证。我这样做是为了让我可以在用户正在处理表单时运行我的验证,而不是等到表单提交后才结束。
然后,我将有效性结果缓存在Field对象中。当用户提交表单时,我不必验证每个字段,我只需检查已计算的有效性,从而提高速度。
问题
用户编辑只有一个字段,光标仍然在这一领域,并在用户点击进入。在射击场的blur
事件之前,这将触发表格的submit
。表单试图提交而不验证编辑的字段。
我知道我可以强制验证submit
上的所有字段,但对我来说这似乎不雅观,似乎是浪费计算。我只需要强制验证当前聚焦的元素,如果该元素是一个输入。
部件解决方案
我已经测试了document.activeElement
,以及工程。但是,我无法弄清楚如何从document.activeElement
返回的节点获取与输入关联的已经存在的JS变量。
具体问题
如果我有一个HTML元素,我创建了一个JS变量,它是这样......
<input type="text" value="My input!" id="mainInput" />
---
var field = document.getElementById('mainInput');
...我怎样才能拿到field
变量只需知道通过document.activeElement
分别再次返回节点?
如果您需要多个字段并使用此答案上的代码来防止提交输入,我认为您的问题可能会得到解决http://stackoverflow.com/questions/16062525/disable-enter-submit – Cruiser
我已经使用event.preventDefault(),因为我遍历Field对象并检查有效性。我只是不想在页面加载时计算所有页面的有效性,我想在后台计算它,以避免延迟。我将字段对象中的有效性与HTML变量一起缓存。字段实际上是'{data:{},el:{},验证:{} ...}'和几个附加的方法。 –
没错。我所说的是,如果你有必填字段,并且用户不能按Enter键提交,你将强制启动.blur验证功能。 – Cruiser