3

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

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

4

3 回答 3

2

我发现为了防止 [enter] 或 [tab] 键事件的默认操作,您必须侦听 keydown 事件并处理/取消它。
当 keyup 或 keypress 被触发时,keydown 的默认值已经发生。

于 2009-01-06T12:31:19.487 回答
2

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

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

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

于 2009-01-11T00:14:23.817 回答
0

wulong 的答案有效,但没有完全回答问题。建议的解决方案是禁用输入文本字段的历史记录。但是有没有办法知道按键事件是来自输入文本还是来自历史?

于 2010-06-07T11:50:39.380 回答