jquery - 无法使用javascript替换旧图像的图像

标签 jquery html css twitter-bootstrap-3 cropperjs

我无法用新选择的图像替换旧图像。在这里,我在模态中显示了所选图像,并允许用户选择图像的一部分。在这种情况下,我可以在模态本身中显示图像。但是单击保存按钮时我无法替换旧图像。我尝试修改代码来解决此问题,但在我的情况下代码不起作用。帮我。提前致谢。

"use strict";

// vars
var result = document.querySelector(".result"),
  img_result = document.querySelector(".img-result"),
  img_w = document.querySelector(".img-w"),
  img_h = document.querySelector(".img-h"),
  options = document.querySelector(".options"),
  save = document.querySelector(".save"),
  cropped = document.querySelector(".cropped"),
  dwn = document.querySelector(".download"),
  upload = document.querySelector("#file-input"),
  cropper = "";
// on change show image with crop options
upload.addEventListener("change", function(e) {
  if (e.target.files.length) {
    // start file reader
    var reader = new FileReader();
    reader.onload = function(e) {
      if (e.target.result) {
        $(".modal").modal("show");
        // create new image
        var img = document.createElement("img");
        img.id = "image";
        img.src = e.target.result;
        // clean result before
        result.innerHTML = "";
        // append new image
        result.appendChild(img);
        // show save btn and options
        save.classList.remove("hide");
        options.classList.remove("hide");
        // init cropper
        cropper = new Cropper(img);
      }
    };
    reader.readAsDataURL(e.target.files[0]);
  }
});
// save on click
save.addEventListener("click", function(e) {
  e.preventDefault();
  // get result to data uri
  var imgSrc = cropper.getCroppedCanvas({
    width: img_w.value // input value
  }).toDataURL();
  // remove hide class of img
  cropped.classList.remove("hide");
  img_result.classList.remove("hide");
  // show image cropped
  cropped.src = imgSrc;
  dwn.classList.remove("hide");
  dwn.download = "imagename.png";
  dwn.setAttribute("href", imgSrc);
});
$(".upload-button").on("click", function() {
  $("#file-input").trigger("click");
});
i:hover {
  cursor: pointer;
}

.dashboard-hme-img {
  max-height: 100%;
  max-width: 100%;
  border-radius: 50%;
  width: 100px;
  height: 100px;
  border: 1px solid #ccc;
}
<link href="https://cdn.paperindex.com/bootstrap/css/font-awesome.min.css" rel="stylesheet">

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/cropper/2.3.4/cropper.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/cropperjs/0.8.1/cropper.min.js"></script>

<!-- 		<input type="file" id="file-input"> -->
<p>Update</p>
<img class="dashboard-hme-img profile-pic" src="https://cdn.paperindex.com/piimages/dummy/vivek.png">
<i class="fa fa-camera upload-button"></i>
<input id="file-input" class="hidden" type="file" accept="image/*" />

<div class="modal fade" id="myModal" role="dialog">
  <div class="modal-dialog">

    <!-- Modal content-->
    <div class="modal-content">
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal">&times;</button>
        <h4 class="modal-title">Modal Header</h4>
      </div>
      <div class="modal-body">
        <!-- leftbox -->
        <div class="box-2">
          <div class="result"></div>
        </div>
        <!--rightbox-->
        <div class="box-2 img-result hide">
          <!-- result of crop -->
          <img class="cropped" src="" alt="">
        </div>
        <!-- input file -->
        <div class="box">
          <div class="options hide">
            <input type="hidden" class="img-w" value="200" min="200" max="1200" />
          </div>
          <!-- save btn -->

        </div>
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-default" data-dismiss="modal">Close</button><button class="btn save hide">Save</button>
      </div>
    </div>

  </div>
</div>

最佳答案

我能够使您的代码只需很少的更改即可工作。

你最大的问题是你的变量在它们有任何东西之前就被创建了,所以它们最终为空。

我所做的只是将 cropped 和 dwn 变量移到 save.addEvenListener 中,并删除了一些在 dwn 上设置的内容。

参见 jsFiddle

save.addEventListener("click", function(e) {
    var cropped = document.querySelector(".cropped");
  //var dwn = document.querySelector(".cropper-crop-box");
  var dwn = document.querySelector(".profile-pic");

  e.preventDefault();
  // get result to data uri
  var imgSrc = cropper.getCroppedCanvas({
    width: img_w.value // input value
  }).toDataURL();
  // remove hide class of img
  cropped.classList.remove("hide");
  img_result.classList.remove("hide");
  // show image cropped
  cropped.src = imgSrc;
  dwn.src = imgSrc;

  //dwn.classList.remove("hide");
  //dwn.download = "imagename.png";
  //dwn.setAttribute("href", imgSrc);
});

关于jquery - 无法使用javascript替换旧图像的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52876413/

相关文章:

javascript - 为什么这个水印插件不起作用?

jquery - jQuery-访问不同文件夹中的音频文件

javascript - 创建元素 <a href=variable1>variable2</a>

javascript - 如何避免在 D3 中对颜色进行硬编码

html - 我网站上的水平滚动条有问题

javascript - window.showmodaldialog 在 chrome 中不起作用

javascript - 让Jquery\Javascript更高效

python - BeautifulSoup 库的 HTML 解析问题

c++ - Qt html解析没有找到任何标签

css - 从 1st 到 4th 选择第 n 个 child