我正在使用 jQuery 编写一个半通用表单插件,以加快我正在从事的项目的开发。
计划是jTemplates模板包含字段,我的插件通过模板查找任何所需的多语言资源,从服务器请求它们,然后将所有内容打包成一个 JavaScript 对象,然后传递给自定义函数“提交”。
一切都运行良好,除了在伪造表单时需要执行的标准“当按下输入时,提交表单”代码:
opts.coreElement.find('input[type=text]').keypress(function(evt) {
if ((evt.keyCode || evt.which) == 13) {
opts.coreElement.find('.saveButton').click();
}
});
问题是在 Firefox 中(至少;我还没有检查过其他浏览器),如果您之前在类似名称的文本框中输入了信息,您将获得表单历史记录。如果您随后通过按 Enter 选择这些建议值之一,它会提交表单。如果您在页面上的第一个输入上,那就不好了。实际上,真的很烦人。
显而易见的解决方案似乎是在字段周围插入一个表单元素,并停止通过 jQuery 提交任何可能的虚拟表单。幸运的是,当我在 ASP.NET MVC 中时,我有幸这样做,但如果我没有这样做呢?如果我的插件不知道它是否已经在一个表单中,所以必须保持自己的状态怎么办?如果我在标准的 WebForms ASP.NET 中并且必须手动将每个输入的返回键“定位”到正确的提交按钮怎么办?
有没有办法,也许通过事件对象本身,来检测按键的上下文,所以我可以过滤掉表单历史项目的选择?