如何使用自定义确认对话框允许使用dropzone删除多个上传的文件?
问题描述:
我想重写删除上传文件时Dropzone处理确认对话框的默认方式,我几乎达到了某种程度。这是我的代码。如何使用自定义确认对话框允许使用dropzone删除多个上传的文件?
Dropzone.confirm = function(question, accepted, rejected) {
showConfirm(question);
$(document).on('click', '#accept-confirm', function() {
hideConfirm();
accepted();
});
}
showConfirm = function(question) {
var confirm_dialogue = '<div id="confirm-dialogue"><span class="question">'+question+'</span><button id="deny-confirm" class="button">Cancel</button><button id="accept-confirm" class="button">Yes</button></div>';
$('body').append(confirm_dialogue).addClass('is-showing-confirm');
}
hideConfirm = function() {
$('body').removeClass('is-showing-confirm');
let dialogue = document.getElementById('confirm-dialogue');
dialogue.parentNode.removeChild(dialogue);
}
我可以点击我的删除按钮,我的自定义确认显示。我可以确认删除并删除缩略图。
问题是我只能为一个图像做到这一点。对于我想删除的任何其他图像,我只是在控制台中出现以下错误。
Uncaught TypeError: Cannot read property 'removeChild' of null
答
你需要使用.on()
因为它被应用到该按钮事件称为多次像以前一样使用.off(),
Dropzone.confirm = function(question, accepted, rejected) {
showConfirm(question);
$(document).off('click', '#accept-confirm').on('click', '#accept-confirm', function() {
hideConfirm();
accepted();
});
}
或者你可以使用一次和外界把你的函数将Dropzone.confirm
像,
Dropzone.confirm = function(question, accepted, rejected) {
showConfirm(question);
}
// now it will be called once only,
$(document).on('click', '#accept-confirm', function() {
hideConfirm();
accepted();
});
以及用于去除从DOM的元件使用.remove(),
hideConfirm = function() {
$('body').removeClass('is-showing-confirm');
$('#confirm-dialogue').remove();
}
您可以检查元素的长度(要删除)一样,
dialogue && dialogue.parentNode.removeChild(dialogue);
第一个答案的作品,将关闭之前。我不完全理解你应用于按钮的事件被称为多次的意思,但它确实有效。第二个失败是因为在Dropzone.confirm之外,接受的()回调不可用。谢谢 –
我的意思是,第一次当你的Confirm函数调用你的'accept-confirm'时,单击事件绑定到DOM,并且每当你确认函数调用时它就会一次又一次地绑定它。所以在单个元素上添加了多个点击事件。这就是为什么你的'hideConfirm'一次又一次地调用这会导致'removeChild'的问题。 –