2012-01-10 18 views
4

jQuery.html()の中で、次のスクリプトを実行します。jqueryの.html()内でjquery/javascriptコードを実行する方法

$("#row1").html("<td id="cellId"><script>if (selectedStr) {var elem = $(\"#cellId\");  
$(elem).bind(\"onRefresh\", function() {loadColor(selectedStr); storeStr(selectedStr);});$(elem).trigger(\"onRefresh\");) }</script><td>") 

要件:

私は細胞とテーブルが含まれているtestPage.jspを持っていました。特定のセルが選択され、「送信」ボタンがクリックされると、ポップアップが開きます。ポップアップ・ページでは、一部のデータが変更され、ajaxによって処理されます。結果のajaxレスポンスは、親行に動的に設定する必要があります。 ajaxレスポンスは、設定されるコンテンツ全体を構築します。これが失敗する場所です。 Ajaxの応答は次のようになります。 <td>content<script>...</script></td> <td>.....<td> <td>content<script>...</script></td> <td>.....<td> <td>.....<td> ... はさらに "selectedStrは" testPage.jspはJavaScriptグローバル変数です。

問題: 1. "selectedStr is undefined"はブラウザのエラーメッセージです。グローバル変数への参照を取得できませんでした。 2.要素のバインドが行われていません。

私はjQuery.getScript()、jQuery.globalEval、jQuery.evalを利用しようとしました。 JQueryの{{html}}を理解できませんでした。

ありがとうございます!私は<script>タグを持っていない

<div id="afterAjax" style="display:hidden"> 
if (selectedStr) { 
    var elem = ... etc... 
</div> 

注:私は、これは動的なコンテンツに隠されたdiv要素を定義することである必要があるとき、私は何をすべきか

+1

は、私はあなたが文出た場合、あなたが必要なすべての手続きを行い取るとfinalyに必要なHTMLコードを –

+1

引用符を#1 ROW1を埋めるべきだと思いますあなたのHTMLが間違ってエスケープされています.... '' cellId' " – david

+0

" cellId "エスケープは、質問の誤字です。 – chinni

答えて

-1

その後、アヤックスの後(またはあなたがそうでなければ、あなたのHTMLにそれを挿入した後: - 誰かがダウンして私の答えをマークし、なぜ知らない

eval($('#afterAjax').html()); 

更新ここ

それが働いて示しフィドルです。私はそれを行う必要があるとき:(私は正確にこれを使用

コードフィドルにだけある:。

$('body').append('<div id="test">test</div><div id="afterAjax" style="display:none">alert("works");</div>'); 

eval($("#afterAjax").html()); 

http://jsfiddle.net/mhart/y22r5/3/

+0

不正なコーダ、 'eval()'はありません! – Blazemonger

+0

ご返信ありがとうございます。しかし、ajaxレスポンス・コンテンツがDOMに追加されると、eval()は機能しません。

0

あなたはそのようにHTMLを構築する必要があります。

var newRow = $('<tr/>').bind('onRefresh',function(){ 

{code} 

}); 

$("#row1").append(newRow); 

または

$("#row1").html(newRow); 

をしかし、私は本当にそれが自分のページ上で動作する方法を正確に理解していない

+0

実際にはイベントを​​にバインドしています。だからすべて​​私はイベントをバインドする必要があります。 "selectedStr"に基づいて、イベントをバインドするかどうかを決定します。 – chinni

3

スクリプトにすべてを入れるのではなく、あなたの要素をメモリに構築してから、addiの前にイベントハンドラを追加してくださいDOMに接続します。

$td = $("<td></td>").attr("id", "cellId") 
    .bind("onRefresh", function() { 
     if (selectedStr) { 
      loadColor(selectedStr); 
      storeStr(selectedStr); 
     } 
    }) 
    .trigger("onRefresh"); 

$("#row1").html($td); 

また、同じIDを持つ複数のtd要素を追加することには注意してください。

+0

私はajaxレスポンスの一部として要素データを構築しています。その後、DOMに追加しています。したがって、.html()で表示されるコンテンツ全体が動的に構築されます。 – chinni

+0

これは問題ありません。あなたの成功ハンドラに上記のコードを追加するだけです。 –

0

javascriptの出力に基づいてhtmlを入力する場合は、関数をjQuery.html()のパラメータとして使用する必要があります。下記参照。より多くの例が読むため

$("#row1").html(function (index, oldHTML){ 
var elem = $(this); 
//This is where you could run your if and other functions 
//formulate the new html 
//then just return it to set the html 
return newHTML; 
}); 

はまた、jQuery.html() api

関連する問題