javascript - 带有进度条的图像交换增加/减少onclick

标签 javascript jquery html css

我正在尝试创建图像交换,当单击按钮时进度条会增加/减少。第一个问题有效,但第二个问题无效。在第二个上,单击第一个按钮(“标记完成”)后图像不会交换。

$(document).ready(function($){
    var progress = 20;
    var picSource = document.getElementById("mark-complete").src;	
var notcomplete = "https://www.w3schools.com/images/picture.jpg";
var completed = "https://www.w3schools.com/images/lamp.jpg";		    


function changePic() {
  if (picSource == notcomplete) {
    picSource = completed;
  } else {
    picSource = notcomplete;
  }
}
document.getElementById("btn").onclick = function() {
  changePic();
  document.getElementById("mark-complete").src = picSource;	
}
document.getElementById("btn2").onclick = function() {
  changePic();
  document.getElementById("mark-complete2").src = picSource;	
}


    $("#pg1 input").on('change', function(){
        if ($("#pg1 input").is(":checked") === true) {
        progress = progress+5;
        $('#blips > .xp-progress').attr("style","width:" + progress + "%");
        }
        else if ($("#pg1 input").is(":checked") === false) {
        progress = progress-5;
        $('#blips > .xp-progress').attr("style","width:" + progress + "%");
        }
    });
	
   $("#pg2 input").on('change', function(){
        if ($("#pg2 input").is(":checked") === true) {
        progress = progress+5;
        $('#blips > .xp-progress').attr("style","width:" + progress + "%");
        }
        else if ($("#pg2 input").is(":checked") === false) {
        progress = progress-5;
        $('#blips > .xp-progress').attr("style","width:" + progress + "%");
        }
    });

});
.xp-progress { background-color: darkred;
    height: 16px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="blips" class="xp-line">
          <div class="xp-progress" role="progressbar" style="width:20%">
            <span class="sr-only" style="color:blue;"></span>
          </div>
        </div>
        

<img id="mark-complete" src="https://www.w3schools.com/images/picture.jpg" style="width:80px; float: right;">
<hr>
<p></p>
<label id="pg1" style="cursor:pointer;border:2px solid grey; padding: 5px 10px; border-radius: 4px;">Mark Completed!
  <input type="checkbox" id="btn"  style="display:none;">
</label>


<hr>
<p></p>                    
<img id="mark-complete2" src="https://www.w3schools.com/images/picture.jpg" style="width:80px; float: right;">

<label id="pg2" style="cursor:pointer;border:2px solid grey; padding: 5px 10px; border-radius: 4px;">Mark Completed!2
  <input type="checkbox" id="btn2"  style="display:none;">
</label>

我知道它与“getelementbyid”有关,但我做错了什么? 这是演示:https://plnkr.co/UGWOqpdeCDhXuS9MMXfI

最佳答案

picSource 始终等于您的第一张图片的路径 (document.getElementById("mark-complete").src)。 您需要将当前图像传递给 changePic 并在单击事件时进行比较。更新的 changePic 返回图像所需的 src。

$(document).ready(function($){
  var progress = 20;    
  var notcomplete = "https://www.w3schools.com/images/picture.jpg";
  var completed = "https://www.w3schools.com/images/lamp.jpg";		    

  function changePic(source) {
    if (source == notcomplete) {
      return completed;
    } else {
      return notcomplete;
    }
  }
document.getElementById("btn").onclick = function() {  
  var imgSrc=document.getElementById("mark-complete").src;
  document.getElementById("mark-complete").src = changePic(imgSrc);	
}
document.getElementById("btn2").onclick = function() {
  var imgSrc=document.getElementById("mark-complete2").src;
  document.getElementById("mark-complete2").src = changePic(imgSrc);	
}


    $("#pg1 input").on('change', function(){
        if ($("#pg1 input").is(":checked") === true) {
        progress = progress+5;
        $('#blips > .xp-progress').attr("style","width:" + progress + "%");
        }
        else if ($("#pg1 input").is(":checked") === false) {
        progress = progress-5;
        $('#blips > .xp-progress').attr("style","width:" + progress + "%");
        }
    });
	
   $("#pg2 input").on('change', function(){
        if ($("#pg2 input").is(":checked") === true) {
        progress = progress+5;
        $('#blips > .xp-progress').attr("style","width:" + progress + "%");
        }
        else if ($("#pg2 input").is(":checked") === false) {
        progress = progress-5;
        $('#blips > .xp-progress').attr("style","width:" + progress + "%");
        }
    });

});
.xp-progress { background-color: darkred;
    height: 16px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="blips" class="xp-line">
          <div class="xp-progress" role="progressbar" style="width:20%">
            <span class="sr-only" style="color:blue;"></span>
          </div>
        </div>
        

<img id="mark-complete" src="https://www.w3schools.com/images/picture.jpg" style="width:80px; float: right;">
<hr>
<p></p>
<label id="pg1" style="cursor:pointer;border:2px solid grey; padding: 5px 10px; border-radius: 4px;">Mark Completed!
  <input type="checkbox" id="btn"  style="display:none;">
</label>


<hr>
<p></p>                    
<img id="mark-complete2" src="https://www.w3schools.com/images/picture.jpg" style="width:80px; float: right;">

<label id="pg2" style="cursor:pointer;border:2px solid grey; padding: 5px 10px; border-radius: 4px;">Mark Completed!2
  <input type="checkbox" id="btn2"  style="display:none;">
</label>

关于javascript - 带有进度条的图像交换增加/减少onclick,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55977106/

相关文章:

html - 使用 Bootstrap 4 对齐 div 中的元素

javascript - XSL 作为 javascript 函数参数

javascript, Javascript 错误

javascript - 如何使用 jQuery 创建选项数组?

javascript - AJAX 请求,3 个有效,第 4 个未到达 PHP

jquery - .data() 仅获取第一个列表项的数据属性?

javascript - 仅定位单击的元素

javascript - getPixelFromCoordinate 返回 null

javascript - 如何让表单中的提交按钮在执行表单的操作之前执行某些操作

html - 为什么我的网站图标链接不起作用?