如何修复这个 jQuery SlideToggle?

Posted

技术标签:

【中文标题】如何修复这个 jQuery SlideToggle?【英文标题】:How to fix this jQuery SlideToggle? 【发布时间】:2011-04-29 21:26:31 【问题描述】:

我正在尝试做的是当单击 dl/dt 库中的这些图像时,在一排图像下独立地滑动切换文本 div,如下所示:

当然,我至少做错了一些事情。标记位于 jQuery 选项卡中可能会很复杂,但情况可能并非如此。 jsfiddle 在这里: http://jsfiddle.net/Yfs2V/8/

我觉得功能有问题:

jQuery函数:

$(".bkcontent").hide();
$("#bookimggallery dt").click(function() 
    $(".bkcontent").hide();
$(this).parent().children(".bkcontent").slideToggle(500); );

HTML:

<div id="bookimggallery">

    <dl class="gallery"><dt><img  src=""></dt>
        <dt>Image Title One</dt></dl>

    <dl class="gallery"><dt><img  src=""></dt>
        <dt>Image Title Two</dt></dl>

    <dl class="gallery"><dt><img  src=""></dt>
        <dt>Image Title Three</dt></dl>

    <dl class="gallery"><dt><img  src=""></dt>
        <dt>Image Title Four</dt></dl>

    <dl class="gallery"><dt><img  src=""></dt>
        <dt>Image Title Five</dt></dl>

</div>

<div id="booktextdiv">

<div class="bkcontent">Lorum Ipsum....</div>

<div class="bkcontent">Lorum Ipsum....</div>

<div class="bkcontent">Lorum Ipsum....</div>

<div class="bkcontent">Lorum Ipsum....</div>

<div class="bkcontent">Lorum Ipsum....</div>

</div>

CSS:

#bookimggallery  width: 600px; height:200px; margin:2px; text-align: center;

dl.gallery width: 93px; text-align: center; float: left;

.gallery dt  width: 80px; margin-top:2px; font-size: .7em; text-align:center;

#booktextdiv span display:none

*(omitted tabs CSS for clairity)*

【问题讨论】:

【参考方案1】:

这里有几个问题。我认为主要是您用来访问图书点击的选择器,而且它的文本似乎没有以任何方式链接到图书库项目。

我修改了你的code slightly here

基本的变化是HTML

<dl class="gallery" rel="one">

在每本书的dl 中添加一个rel="blahh",这将对应于文本div

<div class="bkcontent" id="one">

id="blah" 添加到包含图书文本的div

jQuery 变化:

$("#bookimggallery  dt").click(function() 
    $(".bkcontent").hide();
    var textid = $(this).parent('dl').attr('rel');
    $('#'+textid).slideToggle(500); 
);

选择器现在选择div 中的所有dtid="bookimggallery" 然后它从rel="blah" 获取id,然后滑动切换它。

如果不完全重新安排您的代码布局,我会这样做。

【讨论】:

谢谢,很好的修复。还在学习 jQuery。我发现的一个问题是,在整个页面加载时,所有 .bkcontent div 都将显示为展开状态,因此我将$(".bkcontent").hide(); 添加到一个文档就绪函数中,该函数在完全加载之前隐藏选项卡 CSS,并且有效。跨度> 【参考方案2】:

你的类是bookimggallery而不是imagegallerydiv,另一方面,文本不是&lt;dl&gt;元素的子元素,所以$(this).parent().children(".bkcontent")不包含任何元素。

【讨论】:

谢谢,修复了#bookimggallery。如何在 booktextdiv 中选择元素?【参考方案3】:

检查this reference,您对 DL/DT/DD 的使用似乎有点不对劲。

考虑将您的 html 重新组织为

<dl>
  <dt class="gallery"><img  src="">Image Title One</dt>
  <dd> description text one</dd>

  <dt class="gallery"><dt><img  src="">Image Title Two</dt>
  <dd> description text two</dd>
</dl>

你的 jquery 看起来像

$("dd").hide();
$("dt.gallery").click(function() 
  $("dd").hide(); // or $("dd:visible").slideToggle(500);
  $(this).next("dd").slideToggle(500);
);

【讨论】:

以上是关于如何修复这个 jQuery SlideToggle?的主要内容,如果未能解决你的问题,请参考以下文章

对 slideToggle() jQuery 没有影响

jQuery slideToggle 使用 .on 切换到特定高度

slideToggle jQuery 在加载时关闭

单击父li时的jQuery slideToggle ul

jQuery slideToggle 显示类型

在 IE7 中使用 jquery slideToggle 时内容消失