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”。

这是令人困惑的部分,如果我将此代码复制到页面中然后在浏览器中运行它,它会以正确的方式运行(显示厚框项目)

为什么 AJAX 响应不能正确显示 ThickBox 项?

我的猜测是响应文本中的 class='thickbox' 没有找到知道如何解析该项目的 javascript。

4

4 回答 4

1

您还可以将以下脚本放在 ajax 响应中:

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

每次出现ajax响应时,它将初始化厚框。

于 2011-02-15T06:12:57.800 回答
0

我认为问题在于,这<a class='thickbox'只是没有绑定事件。

当我复制包含链接的现有 dom 元素并且所有绑定事件停止对这些新创建的元素起作用时,我遇到了完全相同的问题。我所要做的就是将事件也绑定到这些元素。

因此,也只需对这个新元素进行厚盒调用即可。不要只使用与 $(document).ready 相同的代码。当我做类似的事情时,事件开始处理新元素,但在旧元素上触发了两次。

编辑回应评论:我不知道thickbox是如何工作的。我一直更喜欢 Slimbox。我确实找到了一些可以帮助你的例子。阅读这个(关于thickbox):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 回答
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;
    });
}

这将 click 事件与考虑动态生成的内容的 jQuery 方法 live 绑定。

于 2012-10-09T16:18:26.883 回答