0

誰かが最初alert(items.index($(this))) = 1と2番目に理由を教えてもらえますかalert(items.index($(this))) = -1。この値は他の関数内でどのように変更されますか?

$(function () {
var items = $('#v-nav>ul>li').each(function () {
    $(this).click(function () {
        //remove previous class and add it to clicked tab
        items.removeClass('current');
        $(this).addClass('current');

        alert(items.index($(this)));

        $('#v-nav>div.tab-content').fadeOut("slow", function () { 
        alert(items.index($(this)));
        $('#v-nav>div.tab-content').eq(items.index($(this))).fadeIn("slow");
        });


      //  window.location.hash = $(this).attr('tab');
    });
});
4

3 に答える 3

3

this現在のオブジェクトを参照します。

最初のバージョンでは、

thisリストのアイテムです$('#v-nav>ul>li')

2番目のバージョンでは、

thisによって選択されたDOMオブジェクトです$('#v-nav>div.tab-content')


以前の値を保持する場合はthis、それを変数にキャッシュします。$(this)(常に関数呼び出しを保存するため、キャッシュは非常に優れた方法です)。

あなたが使うとき、あなたは$(this)実際this$機能に移ります。

$(function () {
var items = $('#v-nav>ul>li').each(function () {
    var $this = $(this);
    $this.click(function () {
        //remove previous class and add it to clicked tab
        items.removeClass('current');
        $this.addClass('current');

        alert(items.index($this));

        $('#v-nav>div.tab-content').fadeOut("slow", function () { 
        alert(items.index($this));
        $('#v-nav>div.tab-content').eq(items.index($(this))).fadeIn("slow");
        });


      //  window.location.hash = $(this).attr('tab');
    });
});
于 2012-11-21T20:16:13.237 に答える
1

アニメーションのコールバック関数内では、thisクリックした要素ではなく、アニメーション化されている要素です。

「コールバックには引数は送信されませんが、これはアニメーション化されているDOM要素に設定されています。」

http://api.jquery.com/fadeOut/

(アニメーション要素に設定されていなかった場合は、windowオブジェクトへの参照になります。)

アニメーション呼び出しの外部の変数への参照をコピーします。

var t = this;
$('#v-nav>div.tab-content').fadeOut("slow", function () { 
  alert(items.index($(t)));
  $('#v-nav>div.tab-content').eq(items.index($(t))).fadeIn("slow");
});
于 2012-11-21T20:17:25.007 に答える
0

各「this」のコンテキストを考慮する必要があります。各コールバックには、個別の「this」変数があります。オリジナルをこのままにしておきたい場合は、次のようにします。

var self = this;
于 2012-11-21T20:16:59.770 に答える