自动完成下拉列表会生成不需要的keydown事件

时间:2011-10-26 19:22:17

标签: javascript jquery html

在我的网站上,我在表单中有几个输入字段。我希望用户能够通过按Enter键在任何字段上提交表单。但是,这会导致问题,因为在Internet Explorer和Safari中,如果用户键入几个字母并打开自动完成下拉列表并使用箭头键并按Enter键进行自动完成,则表单将提交。

如何更改此行为?

另请注意,我有一个“提交”的自定义功能。它不是默认提交。

这是我的jQuery代码:

$('.submitButton').click( submitContactForm );

$('.column input, .submitButton').keydown(function( e ){
    if( e.keyCode == 13 ){// if 'enter' key
        $('.submitButton').click();
    }
});

3 个答案:

答案 0 :(得分:1)

我决定使用safeEnter jQuery plugin。看起来它会很好地解决这个问题。

答案 1 :(得分:0)

您需要在自动填充下拉列表中添加 onkeydown 事件,并在函数中返回false。

答案 2 :(得分:0)

如果您需要阻止表单提交,则应在事件处理程序中的事件对象上调用preventDefault()方法。

element.onkeydown = function(event){
   var event = event || window.event;
   event.preventDefault();
   var code = event.keycode || event.which;

   if(code === 13){
    // Your enter behavior
   }
}

您可以通过调用event.stopPropagation();来阻止事件冒泡DOM。如果您的自动填充功能位于表单中的某个位置,则有助于不在表单上触发事件,而只会在自动填充中触发。