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
事件?