2011-12-16 12 views
0

ページがレンダリングされるときにjQuery経由でいくつかのHTMLを設定する必要があります。たとえば、私はこれを持っているかもしれません:jquery delegateコンテンツの読み込みをトリガーする方法は?

<ol> 
    <li> 
     <div class="theDiv"></div> 
     <a class="theLink"...>...</a> 
    <li> 
<ol> 

時々私はdivを非表示にする必要があります。場合によっては、アンカータグにクリックイベントを適用する必要があります。だから私はこれを持っている可能性があります正常に動作します

$('li').hide(); 
$('a').click(function(){...}); 

を。

ただし、このリストには追加のLIが読み込まれています。残念ながら、私たちはjQueryを使っていません。すべてを再レンダリングするためにajaxがロードされた後に呼び出される関数で、上記をラップすることができます。しかし、より良い方法がありますか?

私はlive()が解決策になると考えていましたが、ドキュメントではdelegate()が優先されるようになっています。

いずれにしても、どちらも、新しいHTMLがDOMに追加された後で単純に再レンダリングするのではなく、イベント(クリック、ホバーなど)をバインドすることしかできないようです。

delegate()経由でタートルを行う方法はありますか?それを処理するより適切な方法はありますか?

UPDATE:これを依頼する

おそらくずっと簡単な方法:AJAXの更新後にDOM時にJSの行為を持っているために、1(通常はコールバック関数を経由して)自分自身を呼び出すAJAXを経由して、それをトリガーする必要がありません、またはDOMアップデートを「監視」し、それに応じて発火するためのjQueryの方法がありますか?

答えて

0

最新のjquery APIコールはjQuery.onです。ドキュメントページの2番目の例は正確にあなたのケースに合っているようです。

+0

はい、この:上の();あなたが使いたいものです。私が持っている質問は、jQueryがjQueryの外でjsによって作られたDOMの変更を認識できるかどうかです。私はそう思ったが、私は知らないと思う。 –

0

実行するコードをAJAXコールのsuccessコールバックに挿入します。同じ要素に対して複数回実行された場合、コードが何かを破壊しない限り、新しい要素に対してのみコードを実行するようにしてください。

+0

そうです、解決策のようです。残念ながら、AJAXはjQuery経由で実行されていませんので、jQueryオブジェクトをキャッシュ/パスすることはできません。 –

+0

次に、コードの一部をリファクタリングする必要があります。しかし、 '$(some_dom_element)'を使うだけでjQueryオブジェクトのネイティブDOMオブジェクトをラップすることができます。コードがすでに実行されているかどうかをテストするには、クラスを追加してから、たとえば、このようなコード: 'var elements = $( '。myDynamicElement:not(.alreadyHandled)')addClass( 'alreadyHandled');' – ThiefMaster

+0

jQuery on()は、 jQuery、私は思う。私が間違っているなら誰か私を修正してください。 @ジェイソンの答えは私が始めるところです。 –

0

解決策は、jQueryを使用し、 内から呼び出されるjavascript関数を作成することです。javascriptは、ajaxを実行しているものです。

注:読んだ後、ライブで見ると()は、クリックやホバーのようなイベントでのみ機能します。

function updateMyStuff() { 
    $('li').hide(); 
    $('a').click(function(){...}); 
} 

...

function myCrazyNonJqueryAjaxWhy?() { 
    updateMyStuff(); 
}