javascript - 单击文件输入上的取消时图像不会变空?

标签 javascript jquery html crop croppic

我正在使用 Croppie此裁剪图像功能的插件。当用户单击取消文件输入时,输入文本字段变为空并且图像不会变空。当用户单击文件输入上的取消按钮时,我也想删除图像。 enter image description here DEMO

HTML

<form action="test-image.php" id="form" method="post">
  <input type="file" id="upload" value="Choose a file">
  <div id="upload-demo"></div>
  <input type="hidden" id="imagebase64" name="imagebase64">
  <a href="#" class="upload-result">Send</a>
</form>

JS

$(document).ready(function() {
  var $uploadCrop;

  function readFile(input) {
    if (input.files && input.files[0]) {
      var reader = new FileReader();
      reader.onload = function(e) {
        $uploadCrop.croppie('bind', {
          url: e.target.result
        });
        $('.upload-demo').addClass('ready');
      }
      reader.readAsDataURL(input.files[0]);
    }
  }
  $uploadCrop = $('#upload-demo').croppie({
    viewport: {
      width: 200,
      height: 200,
      type: 'circle'
    },
    boundary: {
      width: 300,
      height: 300
    }
  });
  $('#upload').on('change', function() {
    readFile(this);
  });
  $('.upload-result').on('click', function(ev) {
    $uploadCrop.croppie('result', {
      type: 'canvas',
      size: 'original'
    }).then(function(resp) {
      $('#imagebase64').val(resp);
      $('#form').submit();
    });
  });   
});

最佳答案

好吧,这可能是一个典型的场景,因为您不能将click 事件 绑定(bind)到文件上传的cancel 按钮,因为文件对话框的结果是不暴露给浏览器。所以我的建议是,将 onchange 事件 写入文件上传元素并检查它的值是否为空。如果是,则在销毁后重置 croppie 实例。这是更新后的代码和 working Fiddle .

HTML

<form action="test-image.php" id="form" method="post">
  <input type="file" id="upload" value="Choose a file" onchange="clearImage(this)" />
  <div id="upload-demo"></div>
  <input type="hidden" id="imagebase64" name="imagebase64">
  <a href="#" class="upload-result">Send</a>
</form>

JS

var $uploadCrop;
var opts = {
  viewport: {
    width: 200,
    height: 200,
    type: 'circle'
  },
  boundary: {
    width: 300,
    height: 300
  }
};

//change function.    
function clearImage(ctrl) {
  if ($(ctrl).val() == "") {
    $('#upload-demo').croppie('destroy');
    $uploadCrop=$('#upload-demo').croppie(opts);
  }
}

$(document).ready(function() {
  function readFile(input) {
    if (input.files && input.files[0]) {
      var reader = new FileReader();
      reader.onload = function(e) {
        $uploadCrop.croppie('bind', {
          url: e.target.result
        });
        $('.upload-demo').addClass('ready');
      }
      reader.readAsDataURL(input.files[0]);
    }
  }

  $uploadCrop = $('#upload-demo').croppie(opts);

  $('#upload').on('change', function() {
    readFile(this);
  });
  $('.upload-result').on('click', function(ev) {
    $uploadCrop.croppie('result', {
      type: 'canvas',
      size: 'original'
    }).then(function(resp) {
      $('#imagebase64').val(resp);
      $('#form').submit();
    });
  });

});

关于javascript - 单击文件输入上的取消时图像不会变空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44429068/

相关文章:

javascript - jQuery - 在其下方显示每个图像链接

javascript - AngularJS - 下拉刷新模块不起作用

javascript - 帧中断检测

javascript - 如何在 Gulp 中使用 Jadeify

javascript - 脚本加载 jquery 中的代码不起作用

html - 网站在 Mac 上显示不同

javascript - 日/夜切换使用 Cookie 在页面刷新时保存

javascript - 将多个字符串和文本连接成一个字符串 - Blogger Javascript

php - Ping 服务器 + 进度条然后显示不同的 div

javascript - 如何在 JQuery Mobile 中保持页面刷新时选定的选项卡?