代码之家  ›  专栏  ›  技术社区  ›  tags2k

按键上下文的JavaScript检测(表单历史选择与表单提交)

  •  3
  • tags2k  · 技术社区  · 17 年前

    我正在使用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和I 手动将每个输入的返回键“定位”到正确的提交按钮?

    是否有一种方法,也许是通过事件对象本身,来检测按键的上下文,这样我就可以过滤掉表单历史项的选择?

    3 回复  |  直到 17 年前
        1
  •  2
  •   meouw    17 年前

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

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

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

        2
  •  2
  •   wulong    17 年前

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

        3
  •  0
  •   Nicolas Hognon    16 年前

    武隆作品的答案,但并没有完全回答这个问题。 建议的解决方案是禁用输入文本字段的历史记录。 但是,有没有一种方法可以知道按键事件是来自输入文本还是来自历史?

    推荐文章