2011-12-12 6 views
1

私はちょうど関数を定義し、それを後で呼び出す方法を学んでいます。 イベントを使用せずに私の関数で 'this'を定義しようとしています。jQuery - イベントのないセレクタへの関数の結びつき?

function slide() { 
    var imgAlt = $(this).find('img').attr("alt"); 
    var imgTitle = $(this).find('a').attr("href"); 
    var imgDesc = $(this).find('.block').html(); 
    var imgDescHeight = $(".main_image").find('.block').height(); 

    $(.active); 
    $(".main_image .block").animate({ opacity: 0, marginBottom: -imgDescHeight }, 250 , 
       function() { 
        $(".main_image .block").html(imgDesc).animate({ opacity: 0.85, marginBottom: "0" }, 250); 
        $(".main_image img").attr({ src: imgTitle , alt: imgAlt}); 
       } 
      ); 
    } 
    }); 

オンラインでは、「$(アクティブ)」と表示されます。 'これは私がクラスをアクティブに選択し、次にそれに次の関数を適用する場所です。通常、私はクリックや何かでこれを設定していましたので、私はそれをどのようにインパクトするかわかりません。

大変助かりました!おかげ

ここでは、jsのフィドルあなたは大きな画像を見ることができる場所です。 http://jsfiddle.net/wzQj6/21/

+1

「$(this)」をキャッシュするほうがよいです。http://stackoverflow.com/questions/5724400/does-using-this-instead-of-this-provide-a-performance-enhancement –

答えて

1

参照ライン3-4(その後、thisの代わりにそれを使用!):

function slide() { 

    //cache all .active elements for reuse 
    var actives = $(".active"); 

    //use the new 'actives' variable instead of 'this' 
    var imgAlt = actives.find('img').attr("alt"); 
    var imgTitle = actives.find('a').attr("href"); 
    var imgDesc = actives.find('.block').html(); 
    var imgDescHeight = $(".main_image").find('.block').height(); 

    //$(.active); -- not sure what you were doing with this :p 
    $(".main_image .block").animate({ opacity: 0, marginBottom: -imgDescHeight }, 250 , 
       function() { 
        $(".main_image .block").html(imgDesc).animate({ opacity: 0.85, marginBottom: "0" }, 250); 
        $(".main_image img").attr({ src: imgTitle , alt: imgAlt}); 
       } 
      ); 
    } 
    }); 

乾杯!

+2

あなたは '$(actives)'を使いたくありません。 'actives'はすでにjQueryオブジェクトですので、あなたは' actives.find ... 'などを実行することができます – Jacob

+1

おかげで、:) – themerlinproject

+0

うわー、それはまったくトリックでした。それは知っておくと便利なことです。本当にありがとう!!! – patrick

0

あなたが関数を呼び出している場合は、その範囲内のthisは(もコンテキストと呼ばれる)は、通常、所有しているオブジェクトです前記機能を呼び出す。 (すなわち、通常bar()this == foo内部foo.bar()、と。)

JavaScriptでは、関数を呼び出すと関数のコンテキストがあり、あなたがそうのようなcallメソッドを使用することができるものを指定したい場合:

bar.call(foo); 
// inside bar, this == foo, even if foo wasn't the owner/caller of the function 

実際に呼びたい関数のコードを投稿していないので、これが(ほとんどの)正しい方法であるかどうかはコメントできませんが、わかっているところでは、これはうまくいくはずですあなたのために。以下、再利用のためのあなたの.active要素をキャッシュする方法については、コード内

// take note, also, that your syntax for selecting .active is incorrect. 
// you should be passing in a string. 
var active_elements = $('.active'); 
some_function.call(active_elements); 
+0

私はそれをいくつかのコンテキスト、あなたの答えのおかげで感謝するために、記述にJSのフィドルを投稿しました:)私はそれを処理しようとしています。私は強力なオブジェクト指向のプログラマーではない....まだ。 – patrick

0

あなたの質問を理解する限り、あなたは別々に準備するスコープ、つまりJavaScriptのコンテキストで関数(jQueryメソッドも)を呼び出す方法を探しています。もしそうなら、ここに私のコード例と説明があります。

var el = $('.active'); 
$.fn.animate.call(el, options, timeout, function() { 
    var active = this; 
    // do whatever you need 
}); 
  1. jQueryのアニメーション機能もjQuery.fnあるjQuery.prototype名前空間で定義されています。
  2. サイドコンテキストで関数を呼び出すには、2つの方法があります。それらはapplycallです。あなたはそれらの違いを確認することがありますhere

私はあなたを助けたと思います。

関連する問題