我在使用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”。
时执行答案 0 :(得分: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中进行调试。使用in构建工具(Ctrl + Shift + J)或install firebug。然后使用F12打开萤火虫。
答案 1 :(得分:0)
用户返回false,它同时执行preventDefault和stopPropogation
你应该在外环中做到这一点..
$("#vnesi").click(function (e) {
$.post("/VnosPrijavnica/PreveriVnose", $("#kriteriji").serialize(), function (data) {
if (data != "ok"){
alert(data);
}
});
return false
});
对于你的另一个问题, firebug 是最好的
答案 2 :(得分:0)
hej user725912 post post is isync意味着你没有及时阻止默认动作。
默认操作完成后,异步调用将返回。
答案 3 :(得分:0)
preventDefault()
。它可以是第一行或最后一行,但不能在其中的另一个函数内,特别是在异步调用的函数中。
希望这有帮助。