e.preventDefault()的问题

时间:2011-05-23 17:41:26

标签: jquery

我在使用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”。

时执行

4 个答案:

答案 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()。它可以是第一行或最后一行,但不能在其中的另一个函数内,特别是在异步调用的函数中。

希望这有帮助。