Javascript 自动完成下拉列表生成不需要的按键事件

Javascript 自动完成下拉列表生成不需要的按键事件,javascript,jquery,html,Javascript,Jquery,Html,在我的网站上,我有几个表单中的输入字段。我希望用户能够通过按enter键在任何字段上提交表单。但是,这会导致一个问题,因为在Internet Explorer和Safari中,如果用户键入几个字母并打开“自动完成”下拉列表,他们使用箭头键并按enter键进行自动完成,则表单将提交 我怎样才能改变这种行为 还请注意,我有一个自定义函数用于“提交”。它不是默认的提交 以下是我的jQuery代码: $('.submitButton').click( submitContactForm ); $('.

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

我怎样才能改变这种行为

还请注意,我有一个自定义函数用于“提交”。它不是默认的提交

以下是我的jQuery代码:

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

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

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

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

如果您需要阻止表单提交,您应该调用
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中。如果您的自动完成是表单中的某个位置,则这将有助于不在表单上激发事件,而仅在自动完成时激发事件。

如果需要阻止表单提交,则应在事件处理程序中的事件对象上调用
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中。如果您的自动完成是表单中的某个位置,则这将有助于不在表单上触发事件,而只在自动完成上触发事件。

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

我已经决定使用。看起来它可以很好地解决这个问题。

这是内置的浏览器自动完成下拉列表。它不在我的代码中。你告诉我默认表单的提交吗?它是内置的浏览器自动完成下拉列表。它不在我的代码中。您告诉我默认表单的提交吗?我希望它在输入时提交。我只是不希望它在回车键处于自动完成下拉列表时提交。我希望它在回车时提交。我只是不想在enter键处于自动完成下拉列表时提交它。为了澄清,我不是说自动完成插件,我是说本机浏览器自动完成建议下拉列表。为了澄清,我不是说自动完成插件,我是说本机浏览器自动完成建议下拉列表。