2012-03-02 53 views
0

我正在使用jquery galleryview插件,並且添加了在點擊鏈接(顯示錶單)時單擊暫停幻燈片並在關閉按鈕單擊時重新啓動的功能。jQuery函數沒有運行驗證表單提交

這工作正常(見下文),但我也想在提交表單時啓動幻燈片。我可以通過將提交按鈕添加到重新開始幻燈片顯示的元素列表來完成此操作,但如果表單未通過驗證,我不希望幻燈片重新開始。

這裏是我的圖庫視圖代碼(濃縮):

(function($){ 
    $.fn.galleryView = function(options) { 
    // Some code 
     return this.each(function() { 
     // Some more code 
      $("#closeEnquiry").click(function(){ 
       restartGallery(); 
      }); 

      function restartGallery(e) { 
       // Code to restart gallery 
      } 
     } 
    } 
} 

,這裏是我的表單提交/驗證碼(restartGallery功能不運行):

$(document).ready(function(){ 
    $("#enquiryForm").validate({ 
     debug: false, 
     rules: { 
      YourName: { 
       required: true, 
      }, 
      YourEmail: { 
       required: true, 
       email: true, 
      }, 
     }, 
     messages: { 
      YourName: "Please let us know who you are.", 
      YourEmail: "A valid email will help us get in touch with you." 
     }, 
     submitHandler: function(form) { 

      $.post('projectform.php', $("#enquiryForm").serialize(), function(data) { 
       closePopup(); 
       $('#enquiryFormContainer').prepend(data); 
       restartGallery(); // This does not run... 
      }); 

     } 
    }); 
}); 

任何想法如何,我可以運行restartGallery函數來自validate函數?

+0

在調用'$ .post()'之前,你不能在提交處理程序中調用「restartGallery()」嗎? – Pointy 2012-03-02 15:59:08

+0

也許,你應該停止標準表單提交? – kirilloid 2012-03-02 15:59:14

+0

@kirilloid你會建議作爲替代方案嗎? – Tom 2012-03-02 16:20:59

回答

0

我有一個類似的問題,一旦JQuery對象在通過AJAX更改DOM後變得無效(處置)。

因此,我的猜測是在做了$('#enquiryFormContainer').prepend(data)之後,restartGallery()引用的一些DOM對象(及其事件處理程序)變得無效。例如,如果restartGallery()引用了一個像這樣初始化的變量:var myDiv = $("#myDiv"),那麼在AJAX調用完成後您需要重新初始化它。