我正在使用 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 中并且必须手动将每个输入的返回键“定位”到正确的提交按钮,该怎么办?

有没有办法,也许是通过事件对象本身来检测按键的上下文,以便我可以过滤掉表单历史记录项的选择?

最佳答案

将文本字段中的 autocomplete 属性设置为 off :

opts.coreElement.find('input[type=text]').each(function() {
     $(this).attr('autocomplete', 'off');
});

这适用于所有主要浏览器(Safari、Firefox、IE)。

关于按键上下文的 JavaScript 检测(表单历史选择与表单提交),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/416220/

10-14 17:23
查看更多