2009-05-10 9 views
3

ウェブページにHTMLを動的に追加しています。また、jQueryを使用して管理しています。DOMをJavascript/jQueryで再評価するにはどうすればよいですか?

HTMLコードを追加すると、jQueryはその存在を無視します。たとえば

$("td.elementToClick").click(... 

はjQueryを使って偉大な動作します。しかし、コードのどこかに私が追加した場合:

$("tr#myRowToAppend").append("<td class="elementToClick>...</td>"); 

jQueryはこの新しい要素をクリックすると無視します。 - 強制的に現在のレイアウトを変更せずにページを評価するようにDOMを強制します(リフレッシュしたくないので、location.reload ()は質問から外れています)。 - 強制的にjQueryがこの新しい要素を内部イベントマネージャに追加します。

onclick="blabla()"を使用しない場合は、実際にjQueryを使用する必要があります。

どうすればこの問題を解決できますか?

答えて

9

あなたが探しているのはjQuery liveです。ドキュメントの説明から: "すべての現在および将来一致する要素のハンドラをイベント(クリックなど)にバインドします。カスタムイベントをバインドすることもできます。"

さらに広い範囲のイベントをサポートするプラグインliveQueryもあります。

+0

は生きていないだろうすべてを解決する。 –

+0

@チャド、あなたは精巧にできますか? – bendewey

+2

@bendewey - liveは現在すべてのイベントで動作していません。 1.3以降は、クリック、dblclick、mousedown、mouseup、mousemove、mouseover、mouseout、keydown、keypress、keyupでは動作しますが、blur、focus、mouseenter、mouseleave、change、submitでは動作しません。 – tvanfosson

2

live()メソッドは頭痛のほとんどを軽減します。

これはIEで頻繁に起こり、クローンされた要素では、IEをサポートするためにはDOM操作をはるかに注意する必要があります。

DOMの新しい部分にdom要素をコピー/移動するという問題を抱えている人には、最初にクローンを作成せずにIEでうまく動かないという問題もたくさんあります。

ですから、ライブ使用するか、動的に挿入されたDOM要素からイベントを処理する必要がある場合、あなたは、イベントをコピーしたい指定する(true)のクローンを確認してくださいあなたがそれらのクローンを作成することができます:

$("body").append('<div id="one"></div>"); 

$("#one").mouseover(function(){}); 

$("body").append($("#one").clone(true).attr('id','two')); 
関連する問題