firefox自动完成'输入'按键自动完成触发输入文本框

Kir*_*Kir 11 asp.net jquery webforms autocomplete

我有一个表单,其中包含一些常见字段,如"电子邮件".我有javascript捕获返回键(13)并提交表单,但在主机面板上使用defaultButton属性时观察到相同的效果.

如果用户在IE上并且正在键入他的电子邮件地址,则通过按Enter键从浏览器的内联自动完成中选择一个项目,不会向Javascript发送任何按键.好.

但是在Firefox上,文本框收到ENTER按键并想要提交表单,但表单不完整.

除了禁用自动完成功能之外,有没有人知道如何阻止此操作?我无法找到一种方法来检测按键实际上来自自动完成列表框.

我正在使用asp.net和jQuery.

编辑 - 澄清:按自动填充中的项目输入不应提交表单.IE行为是正确的(一次!).

我的事件处理程序本身就是:

on key up(试过按键) - if(e.which == 13)submitForm();

问题是,我不知道如何检测到ENTER按下实际来自自动完成控件

Mar*_*cus 2

您可以在按下按键时存储字段的值,然后在按下按键时再次检查。如果一次按键后的字符串中有超过 1 个字符不同,则可以安全地假设选择了自动完成项,并且应该忽略 Enter。

唯一不起作用的情况是,当您有一个字段(例如:email@test.co)并且您选择一个仅添加最后一个字母的自动完成项目时,回车键会无意中提交表单。

希望这至少能让我们开始。我也在尝试找出一个防弹解决方案。如果找到的话我会更新。

编辑

上面有螺丝。整理出来了 如果您检查向上键上的回车键,并且两个向下键/向上键上的输入字段值不相同,则可以假设选择了自动完成项。

var loginCurrentInput = '';

$('input').keydown(function(e) {

  loginCurrentInput = $(this).val();

}

$('input').keyup(function(e) {

  //if enter key pressed
  if(e.keyCode == 13) {

    //check for changed input value
    if($(this).val() != loginCurrentInput) {

      loginCurrentInput = $(this).val();
      return false;

    }

    $('#button').trigger('click');

  }

}
Run Code Online (Sandbox Code Playgroud)