jQuery阻止表单提交两次并输入密钥

时间:2014-07-11 08:33:26

标签: javascript jquery

我有这样的表格:

<form action="/web/events/add" id="EventAddForm" method="post" accept-charset="utf-8">
    <div style="display:none;"><input type="hidden" name="_method" value="POST"/></div> 
    <div class="input text">
        <label for="AddressSearch">Search address</label>
        <input name="adress_search" type="text" id="AddressSearch"/>
    </div>
    <div class="input text required">
        <label for="EventAddress">Address</label>
        <input name="data[Event][address]" type="text" id="EventAddress"/>
    </div>
    <div class="input text required">
        <label for="EventPostNr">Post nr</label>
        <input name="data[Event][post_nr]" type="text" id="EventPostNr"/>
    </div>
    <div class="input text required">
        <label for="EventCity">City</label>
        <input name="data[Event][city]" type="text" id="EventCity"/>
    </div>
    <div class="submit">
        <input onclick="disableSubmit(this)" type="submit" value="Save"/>
    </div>
</form>

所以有disableSubmit函数不允许将表单提交两次。

   function disableSubmit(b)
   {
      b.disabled = true;
      b.value = 'Saving...';
      b.form.submit();
   }
正在调用

并且没有问题,但我想包括另一个函数,如果某些字段处于焦点或按下回车键,则不允许提交表单。这是:

   $("#EventAddForm").submit(function( event ) {
     if ( $("#AddressSearch").is(":focus") ||
        $("#EventPostNr").is(":focus") ||
        $("#EventCity").is(":focus") ||
        event.which == 13){
             event.preventDefault();
       }
     });

在我引入disableSubmit函数之前它曾经工作过,我现在需要的是得到两个被调用的函数,但是无法理解它。

非常感谢任何帮助或指导。

3 个答案:

答案 0 :(得分:0)

只需保留一个阻止多次提交的变量:

jQuery(function($) {
    var submitting = false;

    $("#EventAddForm").submit(function(event) {
        if (submitting) {
            event.preventDefault();
            return;
        }
        submitting = true;
        // rest of code here
    });
});

答案 1 :(得分:0)

在输入字段中,在那里粘贴所需的单词,不再需要调用不是disableSubmit的函数。像这样:

<input name="adress_search" type="text" id="AddressSearch" required />

答案 2 :(得分:0)

由于没有任何建议有效,我一直在进行研究,并找到了一个帮助我的解决方案。希望它对未来的某些人有用。

     var input = document.getElementById('AddressSearch'); 

        google.maps.event.addDomListener(input, 'keydown', function(e) { 
                if (e.keyCode == 13) 
                { 
                        if (e.preventDefault) 
                        { 
                                e.preventDefault(); 
                        } 
                        else 
                        { 
                                // Since the google event handler framework does not handle early IE versions, we have to do it by our self. :-( 
                                e.cancelBubble = true; 
                                e.returnValue = false; 
                        } 
                } 
        });