Javascript 是否在输入键向下键时阻止表单提交?

Javascript 是否在输入键向下键时阻止表单提交?,javascript,forms,Javascript,Forms,我已经构建了一个侦听器,以防止表单在特殊位置提交 我使用的是谷歌地图自动完成api,基本上我不想在用户按enter键并显示“推荐结果”框时提交表单。当用户按enter键从下拉框中选择一个值而不提交表单时 我已经构建了一个侦听器,可以正确捕获事件,但我不知道如何防止表单被提交 $('body').live('keydown', function(e) { if($(".pac-container").is(":visible") && event.keyCode == 13

我已经构建了一个侦听器,以防止表单在特殊位置提交

我使用的是谷歌地图自动完成api,基本上我不想在用户按enter键并显示“推荐结果”框时提交表单。当用户按enter键从下拉框中选择一个值而不提交表单时

我已经构建了一个侦听器,可以正确捕获事件,但我不知道如何防止表单被提交

$('body').live('keydown', function(e) {
    if($(".pac-container").is(":visible") && event.keyCode == 13) {
        e.preventDefault(); // Prevent form submission
        }
    });
我试着用e;但它仍然提交了表格。表单ID为:updateAccountForm

我怎样才能防止它发生

编辑:
我必须指出,直接在搜索输入上监听按键似乎与Google API使自动完成功能失效相冲突。因此,$'inputsearch'按键/按键不可能阻止表单提交

 <form method="post">
    <input type="text" id="search">

    </form>
​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​
    <script>
        $('input#search').keypress(function(e) {
          if (e.keyCode == '13') {
             e.preventDefault();

           }
        });​
    </script>

我想你应该试着用这样的东西…包装检查你的容器的可见性

$('body').keypress(function(e) 
{
  if (e.keyCode == '13') {
     e.stopPropagation()

   }
});​
这篇文章有很好的解释。

试试这个

$('body').live('keydown', function(e) {
    if($(".pac-container").is(":visible") && e.keyCode == 13) {
        e.stopPropagation(); // Prevent form submission
    }
});
请参阅e.keyCode而不是event.keyCode
而e.stopPropagation而不是e.preventDefault

解决方案实际上相当简单。所有侦听器似乎都失败,但添加:

onkeydown="if($('.pac-container').is(':visible') && event.keyCode == 13) {event.preventDefault();}"
直接输入就完成了这个技巧。

相关问题:

当我使用谷歌地图自动完成框时,我想让“回车”和“标签”选择第一项。我遵循上面链接的@amirnissim的解决方案,模拟在输入元素中按下enter/tab键时按下向下箭头键


当我编码它时,我没有将这些输入作为表单的一部分。我不知道如何防止表单按enter键发送事实上我就是这样发现这个问题的,但当我使用Autocomplete时,我的输入不是表单的一部分。

为了防止enter键在上提交表单,我需要一个按键处理程序

$(document).on('keydown', '#my-autocomplete', function(e) {
    if (e.which == 13) {
      $('#my-autocomplete').show();
      return false;
    }
});
。。。以及在自动完成实例化后附加到自动完成的位置更改侦听器:

var my_autocomplete = new google.maps.places.Autocomplete(/*...*/);
google.maps.event.addListener(my_autocomplete, 'place_changed', function() {
    var place = my_autocomplete.getPlace();
    if (!place.place_id) { return; }
});

这并不重要,但它可能在jQuery移动web应用程序中工作。

e.stopPropagation和/或返回false;之后,解决问题?我现在明白了,你们在身体上添加了监听器。因此,输入提交后会触发keypress事件。试着看。绑定并查看第三个参数。我不确定,现在无法测试它。否则,我认为你应该在输入字段中附加一个侦听器,或者在表单中附加一个提交侦听器。请将其添加为问题,我将测试它!谢谢你!我已经测试过了,它可以工作了。你有没有检查过你在event.keyCode中有什么东西?看起来您正在使用jQuery,所以您应该检查e.which。在我指出它之前,我尝试过这个。如果您直接向自动完成输入添加一个按键监听器,那么GoogleAPI似乎会有意或无意地使其无效。这就是为什么我试图倾听尸体的声音。这对我不起作用,因为当按键事件被触发时,.pac容器已经消失,我注意到你还没有检查原始海报状况。pac容器的可见性。因此,按照这种方式,所有使用Enter的表单提交都将被拒绝,这实际上是行不通的。唯一有效的答案是下面的Liso22建议。此外,if子句中有一个错误,keyCode不是字符串:如果e.keyCode==13请原谅我的无知,但是,当你说直接添加到输入时,你的确切意思是什么?他的意思是直接添加到输入标记。因此:我认为上面的第一个代码示例就足够了,因为它允许你针对特定元素,而不仅仅是整个文档。您可能希望在除特定图元外的所有位置使用enter。不知道为什么没有投票。我想OP需要谷歌地图的一些功能,对我来说,我不需要这样的解决方案,只需要在按下Enter/Return键时设置目标和元素并阻止提交。