2011-05-23 101 views
1

我有問題,使用preventDefault。問題是,這段代碼工作正常(它可以防止點擊每次和我得到的警報):問題與e.preventDefault()

$("#vnesi").click(function (e) { 
      $.post("/VnosPrijavnica/PreveriVnose", $("#kriteriji").serialize(), function (data) { 
       if (data != "ok") 
        alert(data); 

      }); 
      e.preventDefault(); 
     }); 

但這並不(理智最多發生,如果數據是「正常」與否):

 $("#vnesi").click(function (e) { 
      $.post("/VnosPrijavnica/PreveriVnose", $("#kriteriji").serialize(), function (data) { 
       if (data != "ok"){ 
        alert(data); 
        e.preventDefault(); 
       } 
      }); 

     }); 

還有一個問題。在Firefox 4(或任何其他瀏覽器,但我更喜歡Firefox 4)中調試JavaScript的最佳方法是什麼?

更新

謝謝您的回答。如果我想讓它像第二段代碼一樣行動,我該如何預防Default()?我只想要e.preventDefault()只在數據!=「ok」的情況下執行。

+1

用戶,螢火蟲是最好的調試。 – kobe 2011-05-23 17:42:28

+0

瞭解正在發生的事情。你是否使用PHP作爲後端?也許你在那裏得到一個錯誤。 – PeeHaa 2011-05-23 17:44:06

+0

我也認爲螢火蟲是最好的 – 2011-05-23 17:44:44

回答

5

你在異步回調中調用e.preventDefault()。事件處理程序將在您阻止該事件之前完成。

基本上,您不能在回調中更改事件,因爲事件已完成。您需要以不同的方式處理(即在回調之外)。

$("#vnesi").click(function(e) { 
    $.post("/VnosPrijavnica/PreveriVnose", $("#kriteriji").serialize(), function(data) { 
     if (data != "ok") { 
      alert(data); 
     } else { 
      // ajax post failed 
      // trigger the action of the event again. (form.submit ??) 
     } 
    }); 
    // prevent the default always 
    e.preventDefault(); 
}); 

用於在Firefox中進行調試。使用構建工具(Ctrl + Shift + J)或install firebug。然後用F12打開螢火蟲。

0

用戶返回false,它都和的preventDefault stopPropogation

你應該做的是,在outerloop ..

$("#vnesi").click(function (e) { 
      $.post("/VnosPrijavnica/PreveriVnose", $("#kriteriji").serialize(), function (data) { 
       if (data != "ok"){ 
        alert(data); 

       } 
      }); 
      return false 
     }); 

和您的其他問題,螢火蟲是最好的

+0

這不是問題的關鍵。 – Raynos 2011-05-23 17:44:15

0

hej user725912 post調用是異步的意思,你不能及時地阻止默認動作。

異步調用在默認操作完成後返回。

0

preventDefault()可以在事件處理函數的作用域中的任何地方調用。它可以是第一行也可以是最後一行,但它不能在之內,而不在之內,特別是不在異步調用中。

希望這會有所幫助。

+0

它可以在另一個功能。它只需要在同步功能內。 – Raynos 2011-05-23 17:47:18