这个页面上有一个图标,当被点击时会触发某些操作。但是当前这个图标是一个锚点。我可以将其改为 div(事实上我的界面中所有的图标都是 div),但出于某种原因以下代码无法正常工作。
为什么第一次点击没有反应?
$('#a').click(save);
function save(ev) {
$('#canvas')[0].toBlob((blob) => {
let URLObj = window.URL || window.webkitURL;
ev.target.href = URLObj.createObjectURL(blob)
ev.target.download = "untitled.png";
});
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<canvas id='canvas'></canvas>
<a id='a'>click me to save</a>
查看行为的 Fiddle: https://jsfiddle.net/udbq3fb7/
toBlob
回调触发时,您的点击事件已经很久之前就结束了。默认行为已经被执行了,并且仅仅覆盖您的<a>
href 是没有直接效果的。您需要自己触发<a>
的click()
方法,但这会创建一个无限循环的save
... 所以最好使用一个新的 anchor,或者甚至更好的是使用一个 库,它甚至可以处理怪癖。 - Kaiido