e.preventDefault()的问题

我在使用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的最佳方法是什么?

更新

谢谢你的回答。 如果我想让它像第二段代码那样行事,我怎么能阻止默认()? 我希望e.preventDefault()仅在数据!=“ok”时执行。

您在异步回调中调用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中调试。 使用in build工具(Ctrl + Shift + J)或安装firebug 。 然后使用F12打开萤火虫。

user返回false,它同时执行preventDefault和stopPropogation

你应该在外环中做到这一点..

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

而对于你的另一个问题, 萤火虫是最好的

hej user725912后调用是异步意味着你没有及时阻止默认操作。

默认操作完成后,异步调用将返回。

preventDefault()可以在事件处理程序函数范围内的任何地方调用。 它可以是第一行或最后一行但它不能在其中的另一个函数内部,特别是在异步调用的函数中。

希望这可以帮助。