[英]Why doesn't my event fire the first time?
$(document).ready(function () {
$('.raj').click(function () {
if (!$(this).hasClass('already')) {
$('.infos').html('');
$('.infos').hide("fast");
$.ajax({
type: "POST",
dataType: "json",
url: "ggg/hhh/rrr.php",
success: function (msg) {
$('.infos').html(msg['ats']);
arr = msg['valid'];
}
});
$('.infos').show("slow");
if (arr == 1) {
$(this).css("cursor", "default");
$(this).addClass('already');
$(this).animate({
opacity: 0.1
}, 1000);
}
}
})
})
当我单击类别为raj
的元素(它是图像)时,什么也没有发生。 只有第二次单击,我的事件才会触发。 为什么会这样呢?
编辑:这部分已完成:
if(arr == 1)
{
$(this).css("cursor", "default");
$(this).addClass('already');
$(this).animate({
opacity: 0.1
}, 1000);
}
但是msg['valid']
实际上始终为1,因此我不明白。
我想知道是不是应该这样?
$(document).ready(function() {
$('.raj').click(function(){
var thisObj = $(this);
if(!$(this).hasClass('already'))
{
$('.infos').html('');
$('.infos').hide("fast");
$.ajax({
type: "POST",
dataType: "json",
url: "ggg/hhh/rrr.php",
success: function(msg) {
$('.infos').html(msg['ats']);
arr = msg['valid'];
$('.infos').show("slow");
if(arr == 1) {
thisObj.css("cursor", "default");
thisObj.addClass('already');
thisObj.animate({
opacity: 0.1
}, 1000);
}
}
});
}
})
})
似乎由于某种原因很难读入缩进,所以放错了位置。
编辑:
附加信息:ajax调用是异步的。 这意味着arr不会第一次设置为1,而是第二次是因为回调已经被触发(我对此的唯一解释)
尝试在ajax回调(成功函数)中运行if(arr == 1)语句
您知道您的“ arr”是在post函数中设置的,并且在您测试后执行。
您的ajax请求不是同步的,您仅配置要执行ajax请求的浏览器,但是您不知道何时执行。
这就是为什么它第二次起作用的原因,因为此后执行了ajax请求。
$('.infos').show("slow");
在Ajax请求发送之后,但在收到响应之前 ,因此在成功函数运行之前,将继续运行。
这意味着不会第一次设置arr
,而只会第二次设置arr
,因为您已将其设为全局。
响应从服务器返回的数据而发生的所有事情,都发生在成功函数内部 ,不要忘了使用var
关键字将变量保持在本地。
您应该在AJAX请求的'success'属性中添加f-cked部分。 另一方面,arr第一次等于0。
var that = $(this);
$.ajax({
type: "POST",
dataType: "json",
url: "ggg/hhh/rrr.php",
success: function (msg) {
$('.infos').html(msg['ats']);
arr = msg['valid'];
$('.infos').show("slow");
if (arr == 1) {
that.css("cursor", "default");
that.addClass('already');
that.animate({
opacity: 0.1
}, 1000);
}
}
});
最好的方法是让萤火虫和断点并检查流量。 您可以使用此方法轻松解决。
如果这不起作用,请尝试使用live进行单击操作,以免出现任何绑定问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.