1

私の問題は、ここの質問に何らかの形で関連しています。メッセージを表示し、その後フェードアウトするプラグインを実行しようとしています。

プラグインは次のとおりです。

(function($) {
$.fn.showWarning = function(msg) {
    return this.each(function() {
        $(this).text(msg).show().hide(); // <-preloads message
        $(this).fadeIn('fast', function() {
            $(this).stop().text(msg);
            setTimeout(function() {
                $(this).fadeOut(300);
            }, 2500);
        });
    });
};
})(jQuery);

コード全体はここにあります:http://jsfiddle.net/e5kns/6/

問題はメッセージが消えないことなので、 setTimeoutと関係があると思います。$(this) が参照すべき場所を参照していないのではないでしょうか?

Firebugは以下を提供します:

a.ownerDocument は定義されていません

そしてクロム

キャッチされていない TypeError: 未定義のプロパティ 'defaultView' を読み取ることができません

4

2 に答える 2

3

あなたは出来る

$(this).stop().text(msg).delay(2500).fadeOut(300)


実際、this以外のものを参照していませんwindowthisブラウザが に設定してタイムアウト コールバックを呼び出しているためwindowです。this関数の呼び出し方法のみに基づいています。

setTimeout($.proxy(function() {
    $(this).fadeOut(300);
}, this), 2500);

提供されたものを破棄thisして使用し、元の関数にthis明示的にapplies する別の関数を生成するため、これを修正します。

于 2012-07-26T18:34:21.273 に答える
1

これを試して、

(function($) {
    $.fn.showWarning = function(msg) {
        return this.each(function() {
            $(this).text(msg).show().hide(); // <-preloads message
            $(this).fadeIn('fast', function() {
                $this = $(this);
                $(this).stop().text(msg);
                setTimeout(function() {
                    $this.fadeOut(300);
                }, 2500);
            });
        });
    };
})(jQuery);

ps:@Esailijaが推奨するように、取引とフェードアウトの方が優れています

于 2012-07-26T18:39:55.420 に答える