【问题标题】:jQuery toggleClass won't toggle on a separate thumbnail click actionjQuery toggleClass 不会在单独的缩略图单击操作上切换
【发布时间】:2017-01-28 20:21:33
【问题描述】:

我的目标

  1. 有一组缩略图。
  2. 单击缩略图来切换类 hiddenElement 并显示一个大 隐藏的 div 中的图像。
  3. 单击 DOM 中的任意位置,它将隐藏或允许用户 切换到下一个 div(如果单击了该 div 的缩略图 #2)。

我的问题: 单击或 DOM 时图像切换得很好,除了当我单击第二个或第三个缩略图等时。它只是保持原始图像向上并在第一个图像下加载下一个单击的图像。

因此,当单击第一个缩略图时,它会加载图像,但是当单击第二个缩略图时,第一个图像无法消失并在其下方加载第二个图像。它应该切换我的 CSS 类 hiddenElement。

我的 jQuery

$("#port1_thumb, #port1_large").on("click", function() {
  $("#port1_thumb, #port1_large").toggleClass("hiddenElement"); 
});

$('document').click(function() {
  $('#port1_large').removeClass('hiddenElement');
});

$("#port2_thumb, #port2_large").on("click", function() {
  $("#port2_thumb, #port2_large").toggleClass("hiddenElement"); 
});

$('document').click(function() {
  $('#port2_large').removeClass('hiddenElement');
});

我的 DOM

<div class="wrap">

    <!-- Hidden elements -->

        <div id="port1_large" class="hiddenElement">
            <img src="assets/portfolio-images/portfolio_content/project1.jpg">   
        </div>

        <div id="port2_large" class="hiddenElement">
            <img src="assets/portfolio-images/portfolio_content/project2.jpg">   
        </div>

    <!-- /Hidden elements -->

    <!-- Thumbnails -->

          <div id="portfolio">
              <ul class="portfolio-grid">
                    <li>
                        <a id="port1_thumb"  target="portfolio">
                            <img src="assets/portfolio-images/portfolio_thumbnails/thumbnail_1.png" alt="img01"/>
                            <h3>Project 1</h3>
                        </a>
                    </li>
                    <li>
                        <a id="port2_thumb"
                           target="portfolio">
                            <img src="assets/portfolio-images/portfolio_thumbnails/thumbnail_2.png" alt="img01"/>
                            <h3>Project 2</h3>
                        </a>
                    </li>
                </ul>
            </div>
</div>

CSS 类

.hiddenElement {
    display: none;
}

注意事项

我有很多 DRY 正在进行,我如何打赌简化我的代码以防止发生此 toggleClass 问题?

我认为这是由于我在我的 jQuery 中一遍又一遍地对同一个类重复操作,但我不知道如何重构它。

我确实找到了JSFiddle 正在发生的事情,但这正是我遇到的问题。无法在缩略图之间切换,尤其是在缩略图之间切换。

如果有关于 toggleClass 这个确切主题的教程或问题发布了多个元素不起作用,请链接它。

感谢您的宝贵时间。

【问题讨论】:

  • 我认为这是因为当您点击#port2_thumb 或#port2_large 时,#port1_thumb 和#port1_large 不知道它。尝试这样的事情:$("#port2_thumb, #port2_large").on("click", function() { $("#port2_thumb, #port2_large").toggleClass("hiddenElement"); $("#port1_thumb, #port1_large").toggleClass("hiddenElement"); });
  • 我确实尝试过类似的方法,不幸的是它仍然会同时加载两个图像。
  • 你也可以尝试用这样的方式来简化你的代码:$( "div[id^='port']" ).on("click", function() { $(this).toggleClass("hiddenElement");})
  • 是的,我昨晚也尝试过,而是从 DOM 中删除了缩略图。我想知道是否应该使用data-target,因为我使用缩略图来触发 DOM 中的 div 来显示。
  • 也许最好使用 addClass 和 removeClass 直到你得到你想要的结果。之后,您使用 toggle() 进行简化。类似:$("#port1_thumb").on("click", function() { $(this).removeClass("hiddenElement"); $('#port2_large').addClass("hiddenElement"); });。进行一些测试,看看它是否是您期望的行为。之后,您可以使用 toggle() 来简化代码。

标签: javascript jquery html css


【解决方案1】:

如果我真的明白你的意思,你需要这样的东西:

<head>
    <title></title>
    <script src="https://code.jquery.com/jquery-3.1.1.slim.min.js"></script>
    <style>
        .hiddenElement {
            display: none;
        }
    </style>
</head>
<body>
    <div class="wrap">

        <div id="port1_large" class="hiddenElement large">
        <img src="assets/portfolio-images/portfolio_content/project1.jpg">
    </div>

    <div id="port2_large" class="hiddenElement large">
        <img src="assets/portfolio-images/portfolio_content/project2.jpg">
    </div>

    <div id="portfolio">
        <ul class="portfolio-grid">
            <li>
                <a id="port1_thumb" class="thumb" target="portfolio">
                    <img src="assets/portfolio-images/portfolio_thumbnails/thumbnail_1.png" alt="img01" />
                    <h3>Project 1</h3>
                </a>
            </li>
            <li>
                <a id="port2_thumb" class="thumb"
                    target="portfolio">
                    <img src="assets/portfolio-images/portfolio_thumbnails/thumbnail_2.png" alt="img01" />
                    <h3>Project 2</h3>
                </a>
            </li>
        </ul>
    </div>
    </div>
    <script>
       
        $("#port1_thumb, #port1_large").on("click", function ()
        {
            $("#port1_thumb, #port1_large").toggleClass("hiddenElement");
        });

        $('document').click(function ()
        {
            $('#port1_large').removeClass('hiddenElement');
        });

        $("#port2_thumb, #port2_large").on("click", function ()
        {
            $("#port2_thumb, #port2_large").toggleClass("hiddenElement");
        });

        $("#port1_thumb").click(function ()
        {
            if (!$('#port2_large').hasClass("hiddenElement"))
                $('#port2_large').addClass("hiddenElement");
            $("#port2_thumb").removeClass("hiddenElement");
        });

        $("#port2_thumb").click(function ()
        {
            if (!$('#port1_large').hasClass("hiddenElement"))
                $('#port1_large').addClass("hiddenElement");
            $("#port1_thumb").removeClass("hiddenElement");
        });

        $('document').click(function ()
        {
            $('#port2_large').removeClass('hiddenElement');
        });
    </script>
</body>

【讨论】:

  • 是的!这几乎就是我想要完成的,我有不止几个缩略图,所以我已经看到我在 DOM 中搞砸了(port2_thumb 应该是 port_thumb2)。我正在对你所拥有的东西进行重构:$("div[id^='port_thumb']").click(function () { if (!$('div[id^='port_large]').hasClass("hiddenElement")) $('div[id^='port_large]').addClass("hiddenElement"); $('div[id^='port_thumb]').removeClass("hiddenElement"); }); 我想我必须为拥有一个类然后删除类等做一个“if”语句。谢谢!
  • 如果你有多个缩略图和多个图像添加类。我将 .thumb 类添加到每个链接,其中包含每个大图像的缩略图和 .large 类。和js: $('.thumb').click(function () { var $this = $(this); var thisId = $this.attr('id'); $('.thumb').each( function () { $(this).removeClass("hiddenElement") }); $('.large').each(function () { $(this).addClass("hiddenElement") }); $this.addClass ("hiddenElement"); $('#' + thisId.replace("thumb", "large")).removeClass("hiddenElement"); });
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-24
相关资源
最近更新 更多