You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

点击缩略图无法切换主图的问题排查及修复代码请求

问题原因

代码的核心问题是JavaScript执行时机错误:负责绑定缩略图点击事件的脚本放在<head>标签内运行,此时页面<body>中的主图、缩略图DOM元素还未完成渲染,document.getElementById('MainImg')、document.getElementsByClassName('small-img')无法获取到对应元素,事件绑定失效,因此点击缩略图没有反应。

修复后完整代码
<!doctype html>
<html lang="en">
  <head>
    <title>Title</title>
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

    <!-- Bootstrap CSS -->
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
    
    <style>
        .small-img-group{
            display: flex;
            justify-content: space-between;
        }
        .small-img-col{
            flex-basis: 24%;
            cursor: pointer;
        }
        .counter1 {
                float: left;
                display: flex;
                justify-content: space-between;
                overflow-x: hidden;
                overflow-y: hidden;
            }

            .counter2 {
                float: left;
                display: flex;
                justify-content: space-between;
                overflow-x: hidden;
                overflow-y: hidden;
                padding-left: 15px;
            }
            
          .up, .down {
                display: inline-block;
                color: rgb(0, 0, 0);
                font-size: 20px;
                margin: 1px 1px;
                cursor: pointer;
                width: 15px;
                line-height: 14px;
                height: 16px;
                text-align: center;
                font-weight: bold;
                border: 1px solid #000;
                user-select: none;
            }
            .up:hover, .down:hover {
                
                color: #fd0b3f;
                text-align: center;
            }

            .adults {
                padding-right: 5px;
            }

            .children {
                padding-right: 5px;
            }

            input {
                appearance: none;
                height: 21px;
                text-align: center;
                width: 42px;
                line-height: 24px;
                font-size: 15px;
                border-radius: 5px;
                
            }            
        .container {
                display: flex;
            }
            input[type="radio"]{
                display: none;
            }
            label[for=private] {
                position: relative;
                color: orangered;
                font-size: 20px;
                border: 2px solid orangered;
                border-radius: 5px;
                align-items: left;
                display: flex;
                cursor: pointer;
                margin-right: 10px;
            }
            label[for=shared] {
                position: relative;
                color: orangered;
                font-size: 20px;
                border: 2px solid orangered;
                border-radius: 5px;
                align-items: left;
                display: flex;
                cursor: pointer;
            }
            input[type="radio"]:checked + label{
                background-color: orangered;
                color: white;
            }
            input[type="radio"]:checked + label:before{
                height: 16px;
                width: 16px;
                border: 10px solid white;
                background-color: orangered;
            }    
    </style>
    <script>
        function increaseCount(e, el) {
                    var input = el.previousElementSibling;
                    var value = parseInt(input.value, 10);
                    value = isNaN(value) ? 0 : value;
                    value++;
                    input.value = value;
                }
                function decreaseCount(e, el) {
                    var input = el.nextElementSibling;
                    var value = parseInt(input.value, 10);
                    if (value > 1) {
                        value = isNaN(value) ? 0 : value;
                        value--;
                        input.value = value;
                    }
                }
                function decreaseCount2(e, el) {
                    var input = el.nextElementSibling;
                    var value = parseInt(input.value, 10);
                    if (value > 0) {
                        value = isNaN(value) ? 0 : value;
                        value--;
                        input.value = value;
                    }
                }
            </script>
</head>
  <body>

    <section class="container sproduct my-5 pt-5">
        <div class="row mt-5">
            <div class="col-lg-5 col-md-12 col-12">
                <img class="img-fluid w-100 pb-1" src="https://skylandtourism.com/wp-content/uploads/2018/03/Morning-Safari.jpg" alt="" id="MainImg" width="450">

                <div class="small-img-group">
                    <div class="small-img-col">
                        <img src="https://media.tacdn.com/media/attractions-splice-spp-674x446/09/99/99/87.jpg" width="100%" class="small-img" alt="">
                    </div>
                    <div class="small-img-col">
                        <img src="https://skylandtourism.com/wp-content/uploads/2018/03/Morning-Safari.jpg" width="100%" class="small-img" alt="">
                    </div>
                    <div class="small-img-col">
                        <img src="https://skylandtourism.com/wp-content/uploads/2018/03/Morning-Safari.jpg" width="100%" class="small-img" alt="">
                    </div>
                    <div class="small-img-col">
                        <img src="https://skylandtourism.com/wp-content/uploads/2018/03/Morning-Safari.jpg" width="100%" class="small-img" alt="">
                    </div>
                </div>
            </div>
            <div class="col-lg-6 col-md-12 col-12">
                <h6>Home / Morning Safari</h6>
                <h3>Morning Safari</h3>
                <h2> <label> Total:</label><label class="total Price"></label> </h2>
                <div class="counter1">
                    <Label class="Adults">Adults</Label>
                    <div class='down' onclick='decreaseCount(event, this)'>-</div>
                    <input type='text' value='1' readonly>
                    <div class='up' onclick='increaseCount(event, this)'>+</div>
                </div>
                <div class="counter2">
                    <Label class="Children">Children</Label>
                    <div class='down' onclick='decreaseCount2(event, this)'>-</div>
                    <input type='text' value='0' readonly>
                    <div class='up' onclick='increaseCount(event, this)'>+</div>
                </div>
                <div class="container" style="padding-left: 0;padding-top: 5px;">
                    <input type="radio" name="occupancy" id="private" checked="checked">
                    <label for="private">Private</label>
                    <input type="radio" name="occupancy" id="shared">
                    <label for="shared">Shared</label>
                </div>
                
            </div>
        </div>
    </section>
      
    <!-- Optional JavaScript -->
    <!-- jQuery first, then Popper.js, then Bootstrap JS -->
    <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
    <!-- 缩略图切换脚本调整到DOM元素加载完成后执行 -->
    <script>
        var MainImg = document.getElementById('MainImg');
        var smallimg = document.getElementsByClassName('small-img');

        smallimg[0].onclick = function() {
            MainImg.src = smallimg[0].src;
        }
        smallimg[1].onclick = function() {
            MainImg.src = smallimg[1].src;
        }
        smallimg[2].onclick = function() {
            MainImg.src = smallimg[2].src;
        }
        smallimg[3].onclick = function() {
            MainImg.src = smallimg[3].src;
        }
    </script>
    </body>
  
</html>

内容的提问来源于stack exchange,提问作者MMunir. Asif

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 03:36:01