繁体   English   中英

为什么我的活动第一次不触发?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM