1

したがって、有効なhtmlを返す(JQueryを使用した)サービスへのajax呼び出しがあります:

<table class='datagrid' style='width: 600px; text-align:left'>
<tr><th>User</th><th>Full Name</th><th>Company</th><th>New Prints</th><th>Reprints</th></tr><tr>
<td>
<a class='thickbox' href='UserSessionReportPopup.aspx?user=1&start=9/2/2009&end=9/30/2009&TB_iframe=true&height=450&width=700'>carbon</a>

</td><td>Carbon County</td>
<td></td>
<td>5</td>
<td>4</td>
</tr>
</table>

このリターン HTML は正しく割り当てられ、ページに表示されますが、「a」タグをクリックすると、iFrame コンテンツを含む「ThickBox」の代わりに新しいページが開きます。

このコードをページにコピーしてブラウザで実行すると、紛らわしい部分がここにあります。正しい方法で動作します (thickbox アイテムを表示します)。

AJAX 応答で ThickBox アイテムが正しく表示されないのはなぜですか?

私の推測では、応答テキストの class='thickbox' は、その項目を解析する方法を知っている JavaScript を見つけていないということです。

4

4 に答える 4

1

次のスクリプトを ajax response 内に配置することもできます。

<script type="text/javascript">
    self.parent.tb_init('a.thickbox, area.thickbox, input.thickbox');
</script>

ajax 応答が発生するたびに厚いボックスを初期化します。

于 2011-02-15T06:12:57.800 に答える
0

私も同じ問題を抱えていました。簡単な答えは、innerHTML に入力した後に次の行を追加することです: tb_init('a.thickbox'); // 再度初期化

これにより、アンカー タグのイベント ハンドラが再初期化されます。私にとって魅力のように働いた...

于 2009-10-09T01:34:30.797 に答える
0

tb_init() を次のものに置き換えます。

   function tb_init(domChunk){
    $(domChunk).live("click", function(){
    var t = this.title || this.name || null;
    var a = this.href || this.alt;
    var g = this.rel || false;
    tb_show(t,a,g);
    this.blur();
    return false;
    });
}

これにより、動的に生成されたコンテンツを考慮する jQuery メソッド live でクリック イベントがバインドされます。

于 2012-10-09T16:18:26.883 に答える
0

<a class='thickbox'問題は、これにはイベントがバインドされていないことだと思います。

リンクを含む既存のdom要素をコピーし、バインドされたすべてのイベントがそれらの新しく作成された要素で機能しなくなったとき、まったく同じ問題が発生しました。私がしなければならなかったのは、これらの要素にもイベントをバインドすることだけでした。

したがって、この新しい要素に対してもシックボックス呼び出しを行うだけです。$(document).ready で使用するのと同じコードを使用しないでください。そのようなことをすると、イベントは新しい要素で機能し始めましたが、古い要素で 2 回発生しました。

コメントに応じて編集:thickboxがどのように機能するかわかりません。私はいつもSlimboxを好んでいます。私はあなたを助けることができるいくつかの例を見つけました。これを読んでください(シックボックスについて):http://15daysofjquery.com/jquery-lightbox/19/

基本的に、ページが読み込まれると、この関数が起動します。

function TB_init(){

    $("a.thickbox").click(function(){

    var t = this.title || this.innerHTML || this.href;

    TB_show(t,this.href);

    this.blur();

    return false;

    });

これで、thickbox クラスを持つすべてのタグが、thickbox ウィンドウでリンク ポイントへのリンクを開きます。新しい a 要素がページに追加された場合、このイベントはそれらにバインドされていないため、ajax マジックを実行してその新しいコンテンツをどこかから引き出した後、その $("a.thickbox").click をバインドする必要があります。 (function(){ への新しいリンクに。次のようなものを追加するだけです

$(newlinkselector).click(function{ etc.. etc.. 

スクリプト内で、ajax 呼び出しによって返されるものをレンダリングする場所の直後。

于 2009-09-16T11:29:39.930 に答える