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()
可以在事件处理程序函数范围内的任何地方调用。 它可以是第一行或最后一行但它不能在其中的另一个函数内部,特别是在异步调用的函数中。
希望这可以帮助。