2011-06-21 15 views
3

多くの場合、この状況に遭遇しました。たとえば、リンク上にマウスを置くとjQueryフェードエフェクトが発生します。ある時点で、ドキュメントトラフのajaxに新しいリンクを追加するので、フェード効果もそれらに適用する必要があります。関数を複数回呼び出すかlivequeryを使用する

二つの可能性があります。

  • は、AJAXを使用すると、リンク
にフェードを適用するために、あなたの最初のdocument.ready関数に livequeryのようなものを使用
  • を完了した後、あなたが再びフェード機能を呼び出します

    どの方法を選択しますか、その理由は何ですか?

  • 答えて

    1

    jqueryには、余分なプラグインを必要とせずにこれを行うネイティブ関数があります。 $.live()

    編集:さらに、最初のオプションはコードの匂いのようです。それをDRYにしておきます。$.live()

    +1

    はい、クリックイベントやそのようなものでのみ動作します。要素が追加された後は、その要素に何かが起きたときにのみ関数を実行することはできません。 – Alex

    +0

    オリジナルのポストを更新してより明確な例を与えることができますか?あなたが与えたのは簡単なイベント委任でした。 –

    +0

    はい、これは悪い例でした:) ok、ここには実生活の状況があります:あなたはページ上のコメントのリストと、より多くのコメントを得るajaxを起動する 'show more'リンクを持っています。それぞれのコメントには、 'レートダウン'、 'レートアップ'、 '返信'などのようなものがあります。基本的にjQueryのものです。新しいコメントにも同様に適用する必要があります。特定のイベントではなく、新しいコメントが追加されたとき... – Alex

    3

    livequery動的要素を追加するjavascriptにアクセスできない場合を除いて、単純に不要なオーバーヘッドが追加されます。

    あなたはフェードをトリガしているイベントハンドラの話をしている場合は、jQueryのイベントの委任に機能delegate()[docs]方法(推奨)またはlive()[docs]メソッドを使用することができます。

    あなたがイベントハンドラについて話していないなら、私は間違いなくAJAXリクエストへのコールバックで自分でコードを適用するつもりです。 livequeryはすっきりしていますが、私の意見では絶対最後の手段でなければなりません。

    +1

    それは速かった!私はデリゲートメソッドを指摘する答えを追加していただけです –