2011-05-23 68 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