javascript - 多次点击缩略图会使网站出错。为什么?

标签 javascript jquery html css

我对第一个缩略图(左上角)有这个问题。当我单击它时,它会显示专辑中的轨道列表(应该如此),但是当我再次单击它时,当它显示列表时,该列表会再次显示与第一个列表重叠的时间。我已经尝试了一切,站点,turorials 等等,但我似乎无法修复这个错误。请帮忙。

PS.School 元素 - 请放轻松:D

站点代码:

<!DOCTYPE html>
<html>
<head lang="pl">
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>Wu-Tang Dyskografia</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <!-- Google Fonts -->
        <link href="https://fonts.googleapis.com/css?family=Montserrat" rel="stylesheet">
    <!-- Google Fonts -->

    <!-- CSS -->
    <link rel="stylesheet" type="text/css" media="screen" href="css/style.css" />
    <!-- CSS -->

    <!-- JavaScript -->
    <script src="javascript/jquery.js"></script>
    <script src="javascript/script.js"></script>
    <!-- JavaScript -->
</head>
<body>
    <div class="container">
        <header>
            <div class="logo">
                <img src="images/logo.jpg"/>
            </div>
        </header>
        <main>
            <div class="mainContainer">
            <article class="album">
                <div>
                    <img src="images/covers/cover1.jpg"/>
                    <span>Enter The Wu-Tang (36 chambers)</span>
                </div>
            </article>

            <article class="album">
                <div>
                    <img src="images/covers/cover2.jpg"/>
                    <span>Wu-Tang Forever</span>
                </div>
            </article>

            <article class="album">
                <div>
                    <img src="images/covers/cover3.jpg"/>
                    <span>The W</span>
                </div>
            </article>

            <article class="album">
                <div>
                    <img src="images/covers/cover4.jpg"/>
                    <span>Iron Flag</span>
                </div>
            </article>

            <article class="album">
                <div>
                    <img src="images/covers/cover5.jpg"/>
                    <span>8 Diagrams</span>
                </div>
            </article>

            <article class="album">
                <div>
                    <img src="images/covers/cover6.jpg"/>
                    <span>A Better Tomorrow</span>
                </div>
            </article>
        </div>
        </main>
    </div>
</body>
</html>

CSS:

::-webkit-scrollbar {
    display: none;
}
body{
    margin:0;
    padding: 0;
    background-color: black;
    font-family: 'Montserrat', sans-serif;
}
.container{
    width:100%;
    height:100%;
}
header{
    background-color:black;
    width:100%;
    height: 250px;
    text-align: center;
}
header .logo{
    width:100%;
    height: 250px;
}
header .logo img{
    text-align: center;
    margin-top:25px;
    width:250px;
    height:200px;
}
main{
    width:100%;
}
main .mainContainer{
    padding-top:50px;
    max-width:700px;
    height:700px;
    display:flex;
    justify-content: space-around;
    flex-wrap:wrap;
    margin:0 auto;
}
main .mainContainer article{
    width:200px;
    height: 200px;
    text-align: center;
    color:yellow;
}
main .mainContainer article img{
    width:200px;
    height:200px;
}
.textDiv{
    color:yellow;
}

JS:

$(document).ready(function(){

    var $enterTheWuTang = [
        'Bring Da Ruckus',
        'Shame On A Nigga',
        'Clan In Da Front',
        'Wu-Tang: 7th Chamber',
        'Can It Be All So Simple',
        'Da Mystery of Chessboxin',
        'Wu-Tang Clan Aint Nuthing Ta F Wit',
        'C.R.E.A.M.',
        'Method Man',
        'Protect Ya Neck',
        'Tearz',
        'Wu-Tang: 7th Chamber - Part II',
        'Method Man (Skun Mix)',
        'Conclusion'
    ];

    $('.album:nth-child(1)').on('click', function(){
        $('.album:nth-child(1)').removeClass('album');
        $('.album').hide();
        $('.checked').fadeIn(2000);

        $('.mainContainer').append('<div class="textDiv"></div>');

        for(i=0;i<=$enterTheWuTang.length-1;i++){
            $('.textDiv').append('<div class="textAreaDiv">'+ (i+1) + '.' +$enterTheWuTang[i]+'</div>');
        }

    });
});

最佳答案

正如我在评论中提到的,您在错误的地方添加了东西。您需要更新元素的 html,而不是一遍又一遍地附加。

$(document).ready(function(){

    var $enterTheWuTang = [
        'Bring Da Ruckus',
        'Shame On A Nigga',
        'Clan In Da Front',
        'Wu-Tang: 7th Chamber',
        'Can It Be All So Simple',
        'Da Mystery of Chessboxin',
        'Wu-Tang Clan Aint Nuthing Ta F Wit',
        'C.R.E.A.M.',
        'Method Man',
        'Protect Ya Neck',
        'Tearz',
        'Wu-Tang: 7th Chamber - Part II',
        'Method Man (Skun Mix)',
        'Conclusion'
    ];
    
    //UPDATED HERE - ADD THE DIV ONCE AND DON'T KEEP ADDING IT
    $('.mainContainer').append('<div class="textDiv"></div>');
    $('.album:nth-child(1)').on('click', function(){
        $('.album:nth-child(1)').removeClass('album');
        $('.album').hide();
        $('.checked').fadeIn(2000);

        //UPDATED HERE - CREATE A SINGLE DIV ELEMENT TO APPEND TO
        var elemList = $('<div>', {
          class: 'textAreaDiv'
        });
        
        for(i=0;i<=$enterTheWuTang.length-1;i++){
        
        //UPDATED HERE - APPEND THE LIST ELEMENT TO YOUR DIV FROM ABOVE
            $(elemList).append('<div class="textAreaDiv">'+ (i+1) + '.' +$enterTheWuTang[i]+'</div>');
        }
        
        //UPDATED HERE - UPDATE THE HTML FOR THAT DIV.
        $('.textDiv').html(elemList);

    });
});
::-webkit-scrollbar {
    display: none;
}
body{
    margin:0;
    padding: 0;
    background-color: black;
    font-family: 'Montserrat', sans-serif;
}
.container{
    width:100%;
    height:100%;
}
header{
    background-color:black;
    width:100%;
    height: 250px;
    text-align: center;
}
header .logo{
    width:100%;
    height: 250px;
}
header .logo img{
    text-align: center;
    margin-top:25px;
    width:250px;
    height:200px;
}
main{
    width:100%;
}
main .mainContainer{
    padding-top:50px;
    max-width:700px;
    height:700px;
    display:flex;
    justify-content: space-around;
    flex-wrap:wrap;
    margin:0 auto;
}
main .mainContainer article{
    width:200px;
    height: 200px;
    text-align: center;
    color:yellow;
}
main .mainContainer article img{
    width:200px;
    height:200px;
}
.textDiv{
    color:yellow;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<!DOCTYPE html>
<html>
<head lang="pl">
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>Wu-Tang Dyskografia</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <!-- Google Fonts -->
        <link href="https://fonts.googleapis.com/css?family=Montserrat" rel="stylesheet">
    <!-- Google Fonts -->

    <!-- CSS -->
    <link rel="stylesheet" type="text/css" media="screen" href="css/style.css" />
    <!-- CSS -->

    <!-- JavaScript -->
    <script src="javascript/jquery.js"></script>
    <script src="javascript/script.js"></script>
    <!-- JavaScript -->
</head>
<body>
    <div class="container">
        <header>
            <div class="logo">
                <img src="images/logo.jpg"/>
            </div>
        </header>
        <main>
            <div class="mainContainer">
            <article class="album">
                <div>
                    <img src="images/covers/cover1.jpg"/>
                    <span>Enter The Wu-Tang (36 chambers)</span>
                </div>
            </article>

            <article class="album">
                <div>
                    <img src="images/covers/cover2.jpg"/>
                    <span>Wu-Tang Forever</span>
                </div>
            </article>

            <article class="album">
                <div>
                    <img src="images/covers/cover3.jpg"/>
                    <span>The W</span>
                </div>
            </article>

            <article class="album">
                <div>
                    <img src="images/covers/cover4.jpg"/>
                    <span>Iron Flag</span>
                </div>
            </article>

            <article class="album">
                <div>
                    <img src="images/covers/cover5.jpg"/>
                    <span>8 Diagrams</span>
                </div>
            </article>

            <article class="album">
                <div>
                    <img src="images/covers/cover6.jpg"/>
                    <span>A Better Tomorrow</span>
                </div>
            </article>
        </div>
        </main>
    </div>
</body>
</html>

基本上,我更新了您的点击功能以执行 3 项不同的操作。

  1. 在开始附加内容之前添加 div,这样可以防止元素被一遍又一遍地添加。

  2. 创建一个我们将附加到的新元素。这将创建一个干净的元素。

  3. 将元素添加到 for 循环之外一次,以一劳永逸地附加它。

关于javascript - 多次点击缩略图会使网站出错。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53750856/

相关文章:

javascript - 预编译 application.js 资源

javascript - 防止透明固定导航栏下方的内容可见

html - Foundation for Emails Inliner 工具破坏布局

html - 搜索图标移出 div,在 chrome 中工作正常但在 mozilla 中不工作

javascript - THREE.js 中的反光 Material

javascript - 在 JavaScript 中加入线程

javascript - 有没有办法检查回发是否正在进行?

html - 将输入固定到页面底部

javascript - 异步等待和常规获取有什么区别?

javascript - 如何防止删除、编辑和拖动树中的记录。 Extjs