2012-04-19 153 views
1

我使用MVC並希望通過jquery提交表單,但對於內置驗證工作的mvc在出現任何無效輸入的情況下,我已經調整了「返回false」點擊事件(也嘗試過「event.preventDefault」),以便從控制器返回「成功」json返回。jquery event preventDefault()不起作用

下面的代碼:

$(document).ready(function() { 
    var request; 
    $('#formSubmit').click(function (event) { 
     request = $.ajax({ 
      url: '/personManager/loadDetails/', 
      type: 'post', 
      data: $('form').serialize() 
     }); 
     request.done(function(data){ 
      if(data=="success") 
       event.preventDefault(); 
      }); 

     }); 
    }); 

我不能讓它工作... 我該怎麼辦錯了嗎? 另外,有沒有更有效的方式來保存mvc驗證機制,同時使用jQuery?

已更新:如果我試圖更簡單地描述我的願望:我想調整點擊事件的preventDefault,所以在某種情況下它會調用表單提交,而在其他情況下,它不會,只有$ .ajax工作。 在服務器端確認沒有發生任何操作後,第二種情況就會發生。 有一定的辦法,我猜...

回答

6

問題很可能是因爲你的ajax是異步的。設置它是同步的,你的代碼應該可以正常工作。但請注意,如果服務器無法即時響應,則可能導致用戶瀏覽器凍結。

+0

+1我上週有和OP一樣的問題。我很確定這是解決方案。 – Curt 2012-04-19 15:42:36

+0

如果你的意思是按照Curt在​​上面提出的建議,那麼它對我來說不起作用...... tnks。 – 2012-04-19 15:44:10

+0

似乎現在就工作。 – 2012-04-19 19:28:12

1

我有一個類似的問題,這個上週。您需要在$.ajax功能上設置async:false。您的默認事件可能在ajax響應有機會阻止此操作之前運行。這是因爲AJAX異步運行。設置async:false將防止這種情況發生。但正如@Kolink指出的那樣,這意味着如果響應失敗,您的頁面可能會凍結。

$(document).ready(function (e) { 
    var request; 
    var preventDefault = false; 
    $('#formSubmit').click(function (event) { 
     request = $.ajax({ 
      url: '/personManager/loadDetails/', 
      type: 'post', 
      data: $('form').serialize() 
      , async: false 
     }); 
     request.done(function (data) { 
      if (data == "success") 
       preventDefault = true; 
     }); 

     if (preventDefault){ 
      e.preventDefault(); 
     } 

    }); 
}); 
+0

tnks,但不工作。問題在於,無論如何我都不會阻止點擊事件。 – 2012-04-19 15:33:19

+0

@Tall請參閱編輯 – Curt 2012-04-19 15:34:23

+0

仍然無法正常工作... – 2012-04-19 15:43:14

0

爲什麼不使用,jQuery驗證?你需要服務器端特定的驗證嗎? 我意識到你已經在使用mvc構建在驗證中,但是因爲你使用jQuery來提交表單,所以你最好使用它來驗證。只是一個建議,因爲你可以這樣做:

$(document).ready(function() { 
    $('form').validate({ 
     rules: {}, 
     messages: {} 
    }); 
    var request; 
    $('#formSubmit').click(function (event) { 
      if($('form').valid()){ 
       request = $.ajax({ 
        url: '/personManager/loadDetails/', 
        type: 'post', 
        data: $('form').serialize() 
       }); 
       request.done(function(data){ 
        if(data=="success") 
         event.preventDefault(); 
        });      
      } 

     }); 
    }); 
+0

我寧願堅持使用MVC驗證.. tnks。 – 2012-04-19 16:02:32