Jquery e.preventDefault()的问题

Jquery e.preventDefault()的问题,jquery,Jquery,我在使用默认设置时遇到问题。问题是,这段代码工作正常,它阻止了每次单击,我收到警报: $("#vnesi").click(function (e) { $.post("/VnosPrijavnica/PreveriVnose", $("#kriteriji").serialize(), function (data) { if (data != "ok") alert(data);

我在使用默认设置时遇到问题。问题是,这段代码工作正常,它阻止了每次单击,我收到警报:

$("#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();
                }
            });

        });
还有一个问题。在Firefox4或任何其他浏览器中调试javascript的最佳方法是什么,但我更喜欢Firefox4

更新


谢谢你的回答。如果我想让它像在第二段代码中那样运行,我如何防止默认值?我希望e.preventDefault仅在数据!=好。

用户返回false,它同时执行preventDefault和StopperProgation

你应该在外面做

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

                }
            });
          return false
        });

至于你的另一个问题,firebug是最好的

用户返回false,它同时执行preventDefault和StopperProgation

你应该在外面做

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

                }
            });
          return false
        });
至于你的另一个问题,firebug是在异步回调中调用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或。然后使用F12打开firebug。

在异步回调中调用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或。然后使用F12打开firebug。


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

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

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

希望这有帮助。

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


希望这能有所帮助。

用户,firebug是最好的调试工具。了解发生了什么。您是否使用PHP作为后端?也许你在这里犯了一个错误。我也认为firebug是最重要的best@kobe&用户:或者如果您使用Chrome。只需使用Chrome的开发工具即可。这两种语言都是很好的工具。对于IF语句,即使只有一行,也要始终使用大括号:-用户,firebug是最好的调试工具。了解发生了什么。您是否使用PHP作为后端?也许你在这里犯了一个错误。我也认为firebug是最重要的best@kobe&用户:或者如果您使用Chrome。只需使用Chrome的开发工具即可。这两种语言都是很好的工具。对于IF语句,即使只有一行,也要始终使用大括号:-这不是当前的问题。这不是当前的问题。它可以在另一个函数中。它只需要在一个同步函数中,也可以在另一个函数中。它只需要在同步函数中。