2011-09-21 92 views
2

我使用jQuery並且阻止提交表單,然後基於ajax響應將提交表單。我發現的問題是我經常需要提交表單兩次。第一次,它顯示了加載器,但似乎沒有在ajax的成功函數中調用任何操作。如果我再次點擊它,它會提交(如果它已被驗證)。在我經歷這個之後,它似乎也是第一次工作。所以,如果我再試一次,它會第一次運作。所以也許這是一個緩存問題?這裏的JavaScript的我:在jQuery中基於ajax響應提交表單

  $('#submit_zipcode_frm').submit(function(event){ 
        event.preventDefault(); 
        var self = this; 
        $(".loader img").show(); 
        z = $('#zipcode'); 
        if(z.val() != '' && z.val().length == 5) { 
         var value = z.val().replace(/^\s\s*/, '').replace(/\s\s*$/, ''); 
         var intRegex = /^\d+$/; 
         if(!intRegex.test(value)) { 
          $(".loader img").hide(); 
          error($(".zipcode_field")); 
          return false; 
         } 
        } else { 
         $(".loader img").hide(); 
         error($(".zipcode_field")); 
         return false; 
        } 

        $.ajax({ 
         url: "/ajax/save/zipcode", 
         type: 'GET', 
         async: false, 
         cache: false, 
         dataType: 'html', 
         data: {zipcode: $('.zipcode_field').val()}, 
         success: function(data) { 
           if(data == 'false'){ 
            $(".loader img").hide(); 
            error($(".zipcode_field")); 
            return false; 
           }else{ 
            self.submit(); 
            getList(); 
           } 
         } 
        }); 
      }); 

和這裏的標記:

     <form id="submit_zipcode_frm" class="submit_zipcode" method="post" action="/go" target="_blank"> 
         <div class="zipcode_container"> 
          <span class="loader"> 
           <img src="/assets/img/loader.gif" style="display: none;"/> 
          </span> 
          <input type="text" class="zip_input zipcode_field ghost" id="zipcode" name="zipcode" value="Enter your Zip"/> 
          <div class="start_btn"> 
           <button type="submit">Submit</button> 
          </div> 
          <div class="clear"></div> 
         </div> 
         <div class="clear"></div> 
         </form> 

任何建議或想法將非常感激。謝謝!

編輯:

只是爲了澄清這裏的步驟:

  1. 用戶點擊提交按鈕
  2. 的JavaScript展會的裝載機和驗證長度和值的類型進入
  3. 如果通過,ajax查找用於真正驗證它是一個有效的USPS郵政編碼
  4. 如果是,表單被提交併且函數getList()被稱爲
  5. 如果不是的話,則會引發錯誤
+0

'self.submit()'是否會導致您的提交處理程序再次被調用? –

+0

@PaulGrime否,'formNode.submit()'將繞過任何jQuery綁定的事件。然而,不久之前的返回錯誤不會做任何事情,這是問題的根源。 –

回答