【问题标题】:jquery.toggle and layout issues when used in table在表格中使用时的 jquery.toggle 和布局问题
【发布时间】:2009-10-27 02:53:27
【问题描述】:

我有一张桌子。每一行都是一条记录。如果您通过 jquery 单击一行(记录),我会在其下方创建一个新的 TR,然后通过 AJAX 插入一个新表(与上述记录有关的数据的相关子集)。这是首先加载的,然后我以漂亮的动画方式展开 TR。

看起来不错。

现在它已加载并展开,我想轻松切换此 TR,以便可以折叠和展开它们,而无需通过 AJAX 重新加载内容。

显而易见/最简单的选择是更改触发器的事件处理程序并给它一个 TOGGLE 事件。

从功能上讲,这是可行的。不过,从美学上讲,这完全是一团糟。

当我第一次 .toggle 关闭时,新 TR 的内容确实很好地折叠,但父表的其余部分直到 TR 完全折叠后才会跟随,然后父表迅速折叠以填补空白。这很不和谐。

然后,在下一个 .toggle 打开时,子表在父表之外进行动画处理,然后迅速折叠其宽度。也很不和谐,现在我只剩下一张与其父级相比非常窄的桌子。

如果我从切换事件中省略动画,它可以正常工作,尽管没有漂亮的过渡。我猜这可能与 jQuery 相关的更多 CSS 相关?关于我可能需要声明 CSS-wise 以防止这种不稳定的视觉行为发生的任何指针?

编辑:根据马特的要求,标记/脚本:

<!-- tr of parent table -->
<tr>
    <td><a href="" class="expandable-expanded">link</a></td>
    <td></td>
    <td></td>
</tr>
<!-- this is the tr I create via jQuery and then want to toggle via above link -->
<tr class="expandedContent">
    <td colspan="3">
        <div class="loadedContent" style="display: block;"><div>
        ... my nested table is here ...
        </div></div>
    </td>
</tr>

我用于切换的 jquery:

$("td a.expandable").click(function(){
    //jquery here that does the initial creation of the TR and loading of the AJAX...

    // after loading ajax, remove the event
    $(this).unbind('click');
    // and then attach the new toggle event
    $(this).closest("tr").next("tr.expandedContent").toggle("slow");

    return false;
});

【问题讨论】:

  • 你当前的代码是什么样的?

标签: jquery css toggle


【解决方案1】:

尝试折叠/展开嵌套表而不是它的容器。

【讨论】:

  • 嗯...也许这是一个线索。为了测试,我没有切换,而是添加了一个红色边框。这将为我创建的 TR 的 TD 添加一个红色边框: $(this).closest("tr").next("tr.expandedContent").children("td").css("border"," 1px 纯红色");但是,如果我尝试访问该 TD 中的 DIV,它似乎不起作用: $(this).closest("tr").next("tr.expandedContent").children("td div.loadedContent") .css("边框","1px 纯红色");奇怪。
  • $(this).closest("tr").next('.expandedContent').children('td').css("border","1px solid red");跨度>
  • Ray:这行得通,因为它为 TD 添加了边框。正是当我尝试在其中引用 DIV 时它不起作用(作为确定是否只是折叠 TR 内容的途径,尽管它可能不会在语义和视觉上如此,然后我留下一个空TR)
【解决方案2】:

table(和tr)元素(尤其是height)上的动画充其量是不稳定的。尝试使用div's 和诸如此类的方式编写您的标记,您会有更好的运气。

【讨论】:

  • 该死的。好吧,至少这是对正在发生的事情的潜在解释。但是,在这种情况下,DIV 没有意义,因为它是真正的表格数据。我认为我们现在必须忍受没有任何动画的简单切换。
  • 也许你的嵌套表格至少可以做成一个 包含另一个表格的 div,然后你为它制作动画?关键是您不应该为表格及其行本身设置动画,而应该为容纳它们的容器而烦恼
  • 确实是这样(参见上面的示例)。这样做的问题是你最终得到一个空的 tr ,它有它自己的 CSS 问题。但是,我也许可以解决这个问题......
猜你喜欢
  • 2017-10-15
  • 2011-06-08
  • 1970-01-01
  • 1970-01-01
  • 2011-02-27
  • 2013-04-28
相关资源
最近更新 更多