我正在使用jQuery编写半通用表单插件,以加快我正在从事的项目的开发.
计划是jTemplates模板包含这些字段,我的插件会在模板中查找以找到任何必需的多语言资源,从服务器请求它们,然后将所有内容打包到JavaScript对象中,然后将其传递给自定义函数“提交”.
一切工作正常,除了伪造表单时需要执行的标准“在按下Enter键时,提交表单”代码外:
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中并且必须将每个输入的返回键手动“定位”到正确的提交按钮,该怎么办?
有没有一种方法可能通过事件对象本身来检测按键的上下文,因此可以筛选出表单历史记录项的选择?
解决方法:
将文本字段中的自动完成属性设置为关闭:
opts.coreElement.find('input[type=text]').each(function() {
$(this).attr('autocomplete', 'off');
});
这适用于所有主要浏览器(Safari,Firefox,IE).