1

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

$(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>

为什么不应该提交表单,我该如何阻止这种情况发生?谢谢

4

2 回答 2

0

这是关注哪个元素的问题。您必须将您的 keydown 事件放在有问题的输入字段上。或者您submit()在表单中添加一个处理程序并做出相应的反应。

在窗口中阻止它为时已晚,因为它已经在焦点位于表单元素上时触发了提交(并且只有在此之后才会冒泡到窗口对象)。

于 2013-01-09T14:03:37.737 回答
0

如果您不希望提交表单,除非“某事”,鉴于您已经在使用 jQuery,请将.submit()处理程序添加到您的表单

于 2013-01-09T13:59:55.840 回答