簡體   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