非常に簡単な質問だと思います。実際、私はそれを理解していないのはばかげていると思います。ここに私のコードの例があります:
http://jsfiddle.net/joeljoelbinks/pVSDL/
抜粋:
function lighten() {
jQuery(this).css('opacity', '0.5');
jQuery(this).html('DO IT!');
}
function darken() {
jQuery(this).css('opacity', '1');
jQuery(this).html('CLICK TO EXPAND');
}
function expand() {
jQuery(this).off('click', expand);
jQuery(this).off('mouseover', lighten);
jQuery(this).on('click', contract);
darken(); //this doesn't get called
jQuery(this).animate({width: '200px', height: '200px'}, 500);
}
function contract() {
jQuery(this).off('click', contract);
jQuery(this).on('mouseover', lighten);
jQuery(this).on('click', expand);
lighten(); //this doesn't get called
jQuery(this).animate({width: '100px', height: '100px'}, 250);
}
これは、私が取り組んでいるWebサイトに実装している拡張divデザインの簡略化されたプロトタイプです。extend()またはcontract()関数内でlighten()およびdarken()関数が呼び出されないことを除いて、すべてが設計どおりに機能します。関数内からそれらを呼び出すために複数の方法を試しましたが、機能しません。それを修正する必要があることを示すために、それらをそこに残したことに注意してください。展開/縮小機能内でそれらを起動するにはどうすればよいですか?これらは、最初にコーディングしたマウスオーバー/マウスアウトイベントにバインドされたときと同じように機能しますが、他の関数内では機能しません。それらにalert()関数を実行させると、すべてのコンテキストで機能しますが、JQuery(this)を変更しようとしている場合は機能しません。
ボーナスの質問:また、jsの上部を見てください:別々にバインドする必要がある現在のコードとは対照的に、両方の変数を同じイベントにバインドするにはどうすればよいですか?私はbind()と他のいくつかのことを試しましたが、それらを別々に行う場合にのみバインドさせることができます。これはDRYの原則に違反します;)