2013-01-09 30 views
1

我有一个提醒,显示给用户,如果他们添加页面上已经存在的元素。我有一个自动完成,如果用户选择的项目,我会提醒他们已经添加了该元素。但是,当我点击警报的确定时,它会提交我不想要的表单。这只发生在一个特定的情况下。当我按下自动完成元素上的回车时,如果元素存在,我会发出警报。然后,如果我点击确定提醒表单提交!我有防止输入提交表单的代码。这里是我的代码:点击确定在JavaScript提交提交形式

$(window).keydown(function(event){ 
    if(event.keyCode == 13) { 
     event.preventDefault(); 
     return false; 
    } 
}); 

$(".autocomp_centers").autocomplete({ 

    serviceUrl:'/suggest_centers', 
     maxHeight:400, 
     width:252, 
     params: {country: $("#country").val() }, 
     minChars:2, 
     onSelect: function(value, data){ 
      var ids = []; 
      $("#sister-centers-list > li").each(function(index, value){ 
       ids.push($(value).attr('class')); 
      }); 

      if ($.inArray("center-"+data, ids) == -1){ 
       $("#hidden-ids").append('<input type="hidden" name="center_ids[]" value="' + data +'" class="center-' + data + '"/>'); 
       $('#sister-centers-list').append('<li class="center-' + data + '">' + value + ' <a href="#sister-center" class="remove-center-before-save" id="' + data + '">Remove</a></li>'); 
      }else{ 
       alert("Sister center has already been added."); 
      }    
      $("#sister-search").val(""); 
     } 
}); 

这是轨道形成:

<%= form_for @center, :url => center_update_sister_centers_path(@center) do |f| %> 

     <div class="field" style="margin-top:10px;"> 
      <%= f.submit 'Save', :class => "btn purple-button" %> 
     </div> 

怎么会被提交表单时,它不应该和如何阻止这种情况的发生?由于

+0

只是疯狂的猜测,但尝试在$(window).keydown(function(event){)中添加一个alert('something')并检查是否.autocomplete在该字段上不重写它 – beder

+0

你试过了吗stopPropagation而不是preventDefault? – mico

+0

我看不到在哪里以及如何提交表单! –

回答

0

如果你不想的形式提交,除非因为您已经使用jQuery“东西”,这样做,加.submit()处理程序表单

0

这是其中的元素被集中的问题。你必须把你的keydown事件放在输入字段中。或者你添加一个submit()处理程序到你的表单并作出相应的反应。

在窗口中防止它太晚了,因为它已经在焦点位于窗体元素(并且仅在该窗口到窗口对象之后)时触发了提交。