jQuery简单提示并不总是有效

时间:2015-02-28 23:01:08

标签: jquery

我得到了这个代码的提示:

$(document).click(function() {
    $('#accept').hide();
    $('#error').hide();
});

function newnick(){
    var newnick = $('#newnick').val();
    if(newnick.match(/^[a-z\d\-_\s]+$/i))
    {

    }
    else
    {
        // THIS ISN'T WORKING:
        var scrol = $(document).scrollTop() + 10;
        $("#error").css({'margin-top':scrol + 'px'})
        $("#error").html("Nope");
        $("#error").show();
        return false;
    }

    $.ajax({
        type: 'post',
        url: 'doedit.php',
        data: {mach: "username", username: newnick},
        success: function(data) {
            if(data == 0)
            {
                // BUT THIS WORKS:
                var scrol = $(document).scrollTop() + 10;
                $("#error").css({'margin-top':scrol + 'px'})
                $("#error").html("Dieser nickname ist bereits vergeben!");
                $("#error").show();
            }
            else
            {
                // AND THIS WORKS:
                var scrol = $(document).scrollTop() + 10;
                $("#accept").css({'margin-top':scrol + 'px'})
                $("#accept").html("Nickname gespeichert");
                $("#accept").show();
            }
        }
    });
}

正如您所看到的,我多次使用它,但它仅适用于AJAX,因为我也是这样测试的:

$(document).click(function() {
    $('#accept').hide();
    $('#error').hide();
});

function newnick(){
        var scrol = $(document).scrollTop() + 10;
        $("#error").css({'margin-top':scrol + 'px'})
        $("#error").html("Nope");
        $("#error").show();
}

它不起作用。

当我删除时:

$(document).click(function() {
    $('#accept').hide();
    $('#error').hide();
});

然后提示显示但我无法点击它。这有什么不对?

1 个答案:

答案 0 :(得分:0)

由于javascript是异步的,因此在函数$(document).click(function(){});之前不会始终调用函数newnick()

如果在函数show()之前调用函数hide(),则"错误"将被隐藏。由于AJAX函数需要更长时间,函数show()很可能在函数$(document).click(function(){});之后调用。

基本上,你必须等到函数$(document).click(function(){});完成才能调用函数newnick()