【问题标题】:javascript/html: Second onclick attributejavascript/html:第二个 onclick 属性
【发布时间】:2017-03-25 18:43:18
【问题描述】:

我有一张图片 - image1.png。当我第一次单击按钮时,我希望它更改为 image2.png。当我第二次单击该按钮时,我希望它更改为另一个图像 image3.png。

到目前为止,我已经将它完美地更改为 image2,很容易。我只是在寻找第二次更改它的方法。

HTML:

<img id="image" src="image1.png"/>

<button onclick=changeImage()>Click me!</button>

JavaScript:

function changeImage(){

document.getElementById("image").src="image2.png";

}   

我知道我可以在按钮代码中使用 HTML 更改图像源,但我相信使用 JS 函数会更清晰。不过,我对所有解决方案持开放态度。

【问题讨论】:

  • 使用addEventListener
  • 检查点击处理程序中 src 属性的值,然后相应地更改它
  • this 可能会有所帮助

标签: javascript html


【解决方案1】:
function changeImage(){
  document.getElementById("image").attr("src","image2.png");
}

【讨论】:

    【解决方案2】:

    您需要一个计数器来增加图像编号。只需将maxCounter 变量设置为您计划使用的最高图像编号。

    另外,请注意,此代码删除了内联 HTML 事件处理程序,这是一种将 HTML 与 JavaScript 挂钩的非常过时的方法。不推荐这样做,因为它实际上围绕您的回调代码创建了一个全局包装函数,并且不遵循 W3C DOM Level 2 事件处理标准。它也不遵循 Web 开发的“关注点分离”方法。最好使用.addEventListener 将您的 DOM 元素连接到事件。

    // Wait until the document is fully loaded...,
    window.addEventListener("load", function(){
    
      // Now, it's safe to scan the DOM for  the elements needed
      var b = document.getElementById("btnChange");
      var i = document.getElementById("image");
    
      var imgCounter = 2; // Initial value to start with
      var maxCounter = 3; // Maximum value used
    
      // Wire the button up to a click event handler:
      b.addEventListener("click", function(){
    
        // If we haven't reached the last image yet...
        if(imgCounter <= maxCounter){
          i.src = "image" + imgCounter + ".png";
          console.log(i.src);
          imgCounter++;
        }
      });
      
    });  // End of window.addEventListener()
    <img id="image" src="image1.png">
    
    <button id="btnChange">Click me!</button>

    【讨论】:

    • 这个解决方案假设有无限数量的图像,但原始问题说只有三个......如果用户点击 1972 次怎么办?
    • @AykutAteş 正如我的回答所说“如果你有一个数字上限,只需在 imgCounter++ 代码周围添加 if/then 逻辑。”
    • @AykutAteş 添加简单的if(cnt&lt;=3){ // than do something } 即可解决问题
    • @GovindaRajbhar 显然,但这个答案(和你的)仍然不是我相信的那个问题的答案。
    • 不幸的是,它似乎不适合我;对所有答案都有疑问(我很欣赏所有答案,顺便说一句)。单击按钮后,只会停留在第一张图片上。
    【解决方案3】:

    如果您将其设置为循环,请检查以下代码:

    JS

        var imgArray = ["image1.png", "image2.png", "image3.png"];
    
    
            function changeImage(){
                var img = document.getElementById("image").src.split("/"),
                    src = img[img.length-1];                        
    
                    idx =   imgArray.indexOf(src);
                    if(idx == imgArray.length - 1)      {
                        idx = 0;
                    }
                    else{
                        idx++;
                    }
                    document.getElementById("image").src = imgArray[idx];                   
            } 
    

    html

    <button onclick=changeImage();>Click me!</button>
    

    【讨论】:

      【解决方案4】:

      为了实现您的场景,我们必须使用计数器标志来分配下一个图像。这样我们就可以扔了。

      我们可以让它更简单

      var cnt=1;
      function changeImage(){
          cnt++;
          document.getElementById("image").src=  = "image" + cnt + ".png";        
      }  
      

      【讨论】:

      • cnt需要从2开始,否则第一次点击按钮不会改变图像,除非你移动cnt++使其在src赋值之前。跨度>
      • @ScottMarcus 谢谢你是对的,我做对了
      【解决方案5】:

      只需使用 if 语句来确定图像的当前来源是什么,如下所示:

      function changeImage(){
          var imageSource = document.getElementById("image").src;
          if (imageSource == "image1.png"){
              imageSource = "image2.png";
          }
          else if (imageSource == "image2.png"){
              imageSource = "image3.png";
          }
          else {
              imageSource = "image1.png";
          }
      } 
      

      这应该使图像在 3 个不同的图像文件(image1.pngimage2.pngimage3.png)之间旋转。请记住,这仅在您要旋转的图像文件数量有限时才有效,否则最好使用计数器。

      希望这会有所帮助。

      【讨论】:

        【解决方案6】:

        试试这个

        function changeImage(){
            var img = document.getElementById("image");
            img.src = img.src == 'image1.png' ? "image2.png" : "image3.png";
        } 
        

        【讨论】:

        • 似乎只是从第一张图像跳到第三张图像。 ://
        猜你喜欢
        • 2015-08-09
        • 1970-01-01
        • 1970-01-01
        • 2017-08-06
        • 2019-07-14
        • 2015-07-30
        • 1970-01-01
        • 1970-01-01
        • 2012-12-12
        相关资源
        最近更新 更多