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按下实际来自自动完成控件
您可以在按下按键时存储字段的值,然后在按下按键时再次检查。如果一次按键后的字符串中有超过 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)
| 归档时间: |
|
| 查看次数: |
3385 次 |
| 最近记录: |