2012-04-26 15 views
6

私は少しjqueryスクリプトを作成しましたが、私はカスタム関数で(this)を使うのに問題があります。jquery(this)in custom functions

これはコードです:

jQuery("li").click(function() 
{ 
    var scrollTop = jQuery(window).scrollTop(); 
    if(scrollTop > 0) 
    { 
     jQuery('html, body').animate({ scrollTop: 0 }, 'slow', function() 
     { 
      fadeItems(); 
     }); 

    } 
    else 
    { 
     fadeItems();  
    } 

}); 

function fadeItems() 
{  
    var slogan = jQuery(this).children('p').html(); 

    jQuery('#slogan_text').fadeOut(150, function(){ 
     jQuery('#slogan_text').fadeIn(150).html(slogan); 
    }); 

    var content = jQuery(this).children('#post_content_large').html(); 
    jQuery('#content_view').html(content).hide(); 

    var status = jQuery("#readMore").html(); 

    if(status == 'Verbergen') 
    { 
     jQuery('#content_view').fadeIn(500, function(){ 
      jQuery('#content_view').fadeIn(500).html(content); 
     }); 
    } 

    var title = jQuery(this).children('h3').html(); 

    jQuery('#title_content').fadeOut(150, function(){ 
     jQuery('#title_content').fadeIn(150).html(title); 
    }); 
} 

だから、リストの項目をクリックしたときに関数が実行され、それはWELが、(この)の値を行く空

誰かがこの問題を解決する方法を知っていますか?

ありがとうございます!あなたがクリックした項目)

var clicked = this; 
    jQuery('html, body').animate({ scrollTop: 0 }, 'slow', function() 
    { 
     fadeItems(clicked); 
    }); 

function fadeItems(el) 
{  
var slogan = jQuery(el).children('p').html(); 

答えて

2

.callはここに役立つことができます。その場合の

jQuery("li").click(function() { 
    var self = this; 
    var scrollTop = jQuery(window).scrollTop(); 
    if(scrollTop > 0) { 
     jQuery('html, body').animate({ scrollTop: 0 }, 'slow', function() { 
      fadeItems.call(self); 
     });  
    } 
    else { 
     fadeItems.call(self); 
    }  
}); 
+0

ありがとうございました! :) –

2

それはそれを使用できるように、関数に渡す必要がありますので(また、多分これと異なるdomething使用は、以下(混乱編集する:

fadeItems.apply(this);

そのように、あなたが(手動fadeItemsthisの値を代入)関数呼び出しのコンテキストを指定することができます

EDIT:@KevinBで述べたように、あなたは親関数にエイリアスthisにする必要があります:var that = this;、その後、機能、fadeItems.apply(that);thatを渡します。

+0

'this'は、彼が探している要素ではありません。 –

+0

@KevinBは彼がclikedアイテムを必要としているとは読んでいませんでした。 –

2

使用applyをしたいので、

+0

これは 'else {}'でうまくいきますが、アニメーション内で 'this'は' html'と 'body'エレメントを参照しています –

+0

あ、原則は同じですが、親スコープにコンテキストを格納する必要があります。 – Mathletics