Javascript 组合模糊并单击事件

Javascript 组合模糊并单击事件,javascript,jquery,events,Javascript,Jquery,Events,我尝试实现以下代码 $("#email").blur(function(){ var email = $("#email").val(); $.ajax({ type: "POST", url: "email_check.php", data: "email="+email, cache: false, success: function(msg) { $("#ema

我尝试实现以下代码

$("#email").blur(function(){
    var email = $("#email").val();
    $.ajax({ 
        type: "POST", 
        url: "email_check.php", 
        data: "email="+email, 
        cache: false,
        success: function(msg) { 
            $("#emailcheck").ajaxComplete(function() { 
                if (msg == "OK") {
                    $(this).fadeIn("slow").html('email available');
                }
            });
        }
    }); 

    $("#register").click(function(){
        $("#emailcheck").hide();
    });


<div class="clear" id="emailline">email:<input type="text" name="email"   id="email" style="border:1px solid #928b8b;"></div>
<div id="emailcheck"></div>
<input  type="button" class="form_button" id="register" value="register!">
$(“#email”).blur(函数(){
var email=$(“#email”).val();
$.ajax({
类型:“POST”,
url:“email_check.php”,
数据:“email=”+email,
cache:false,
成功:函数(msg){
$(“#emailcheck”).ajaxComplete(函数(){
如果(消息==“确定”){
$(this.fadeIn(“slow”).html(“电子邮件可用”);
}
});
}
}); 
$(“#注册”)。单击(函数(){
$(“#emailcheck”).hide();
});
电邮:

问题是当我点击“注册”按钮时,“电子邮件可用”消失,但它再次出现。我希望它永远消失。谁能告诉我我的代码出了什么问题,我们将非常感谢您的帮助!

问题看起来可能在于
模糊
函数触发之间的竞争条件,以及
单击
函数触发顺序

想想看:如果你的
#email
元素处于焦点位置,没有任何事情发生,一切都很好。当你点击
#register
按钮时,会发生两件事:首先,
blur
功能会启动,还有
click
功能,隐藏
#emailcheck
元素

AJAX调用很可能在
click
函数隐藏了
#emailcheck
元素后完成,从而在隐藏后再次显示它……有意义吗

您需要做的是找到一种方法,在调用
click
函数时禁用
blur
事件侦听。我可能会尝试解除绑定事件:

$("#register").click(function(){
    $("#email").unbind("blur");
    $("#emailcheck").hide();
});
…或使用布尔标志尝试检查是否应触发模糊事件:

var run_blur = true;

$("#email").blur(function(){
    if (run_blur){
        ...
    }
}

$("#register").click(function(){
    run_blur = false;
    $("#emailcheck").hide();
});
这假设执行顺序是有利的,但我希望这能有所帮助!如果你还在挣扎,请告诉我!:)

编辑:

这里有一个关于JSFIDLE的示例,用于我所说的布尔标志版本:。

Use

success: function(msg) {  
            $("#emailcheck").ajaxComplete(function() {  
                if (msg == "OK") { 
                    $(this).fadeIn("slow").html('email available'); 
                    hideDiv();
                } 
            });



function hideDiv(){
    $("#register").click(function(){ 
            $("#emailcheck").html('');
            $("#emailcheck").hide(); 
        }); 
}

感谢@reporter编辑此内容!;)感谢您的回答,您能给我一个关于JSFIDLE的演示吗?没问题,更新了我的答案…希望这是您想要的答案!:)这可能无法解决异步AJAX请求在成功请求时显示
#emailcheck
div的问题。我不确定我是否完全理解y您正在尝试执行此操作。为什么在每次成功的AJAX调用后都要尝试绑定
click
事件?