【问题标题】:How to change a single image with a single button...?如何使用单个按钮更改单个图像...?
【发布时间】:2019-11-04 16:18:34
【问题描述】:

我正在为一个朋友构建一个 HTML 文档。这个想法是他的孩子真的很喜欢汽车,所以他可以去这个网站并点击网站上的按钮,这些按钮会给他不同的汽车图像。我试图连接一个情况,在页面上会有 9 个不同的汽车图像,每个图像下面都有一个按钮,他可以单击该按钮,只会更改他单击的一个图像。我一直在努力实现这一目标,而在 Stack Overflow 上寻找解决方案让我更加困惑。我希望有人可以提供帮助。

这是我已经尝试过的......

HTML -

<div class="carsButton">
    <img src="https://source.unsplash.com/344x220/?cars" width="100%" height="225">
        <div class="card-body">
            <div class="d-flex justify-content-between align-items-center"
                <div class="btn-group">
                    <button type="button" class="btn btn-sm btn-outline-secondary" onClick="buttonClickThing()">Refresh Image</button>
                </div>
            <small class="text-muted">1</small>
        </div>
    </div>
</div>

JS-

function buttonClickThing () {
    var d = new Date();
    document.getElementsByClassName("carsButton", "carsImage").src = "https://source.unsplash.com/344x220/?cars" + d.getTime();

    console.log(' done ');

}

我输入了“完成”控制台注释,以便我知道按钮工作正常。我会看到“完成”出现在控制台上,但图像不会改变。我相当确定我的格式错误或连接图像/按钮错误。我希望这里的社区可以帮助我。

【问题讨论】:

    标签: javascript html image button


    【解决方案1】:
    <div class="carsButton">
    <img src="https://source.unsplash.com/344x220/?cars" width="100%" height="225">
        <div class="card-body">
            <div class="d-flex justify-content-between align-items-center">
                <div class="btn-group">
                    <button type="button" class="btn btn-sm btn-outline-secondary" onclick="buttonClickThing(this)">Refresh Image</button>
                </div>
            <small class="text-muted">1</small>
        </div>
    </div>
    

    JS

    function buttonClickThing(elem) {
       var d = new Date();
    
      elem.closest('.carsButton').querySelector('img').src = 
      "https://source.unsplash.com/344x220/?cars" + d.getTime()
    
      console.log(' done ');
    }
    

    【讨论】:

    • 这成功了!!!非常感谢!!!我将不得不研究您的解决方案才能理解它。这非常有帮助,会让一个刚开始上学的小男孩非常开心!我希望向他解释代码是如何工作的,以使他对自己编写代码产生兴趣。
    • 很高兴能为您提供帮助。如果你喜欢link,你可以查看文档
    【解决方案2】:

    调用document.getElementBy....时需要引用&lt;img&gt;元素。 尝试以下解决方案:

    function buttonClickThing () {
        var d = new Date();
        document.getElementById("carImg").src = "https://source.unsplash.com/344x220/?cars" + d.getTime();
    
    }
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <div class="carsButton">
        <img src="https://source.unsplash.com/344x220/?cars" id="carImg" width="100%" height="225">
            <div class="card-body">
                <div class="d-flex justify-content-between align-items-center"
                    <div class="btn-group">
                        <button type="button" class="btn btn-sm btn-outline-secondary" onClick="buttonClickThing()">Refresh Image</button>
                    </div>
                <small class="text-muted">1</small>
            </div>
        </div>
    </div>

    【讨论】:

    • 感谢您的回复!这适用于其中一个图像,但是当我尝试对页面上的第二个图像使用相同的 HTML / JS 解决方案时,它只会刷新第一个图像。我假设我必须为每个要更改的图像连接一些唯一标识符,但我觉得有一种方法可以用一个简单的 JS 命令来完成,而不必为一个 HTML 元素分别连接一个按钮...
    【解决方案3】:

    当您使用ElementByClassName 时,它​​会返回对象数组。那么你必须选择第一个对象然后你可以改变它的 src 属性。 使用此代码:

    <div>
        <img class="carsButton" src="https://source.unsplash.com/344x220/?cars" width="500" height="225">
        <div class="card-body">
            <div class="d-flex justify-content-between align-items-center">
                    <div class="btn-group">
                        <button type="button" class="btn btn-sm btn-outline-secondary" onClick="buttonClickThing()">Refresh Image</button>
                    </div>
                <small class="text-muted">1</small>
            </div>
        </div>
    </div>
    
    <script>
        function buttonClickThing () {
        var d = new Date();
        document.getElementsByClassName("carsButton")[0].src = "https://source.unsplash.com/344x220/?cars" + d.getTime();
    
        console.log(' done ');
    
    }
    </script>
    

    【讨论】:

    • 非常感谢您的回复。我不知道使用 getElementsByClassName 会返回一个数组。我的一个朋友提到我需要抓取数组的第 0 个对象,但我不知道如何。这对解释他的想法很有帮助。感谢所有的帮助和建议。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-30
    • 2013-07-24
    • 2017-01-21
    • 1970-01-01
    • 2012-10-24
    • 1970-01-01
    相关资源
    最近更新 更多