2017-04-10 12 views
0

アップロードされたファイルを削除するときに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); 
} 

削除ボタンをクリックすると、カスタム確認が表示されます。削除を確認でき、サムネイルは削除されます。

問題は、1つの画像に対してのみこれを行うことができることです。私が削除したい他の画像については、私のコンソールで次のエラーが表示されます。

あなたがそのボタンに適用されているイベントが

Dropzone.confirm = function(question, accepted, rejected) { 
    showConfirm(question); 
    $(document).off('click', '#accept-confirm').on('click', '#accept-confirm', function() { 
     hideConfirm(); 
     accepted(); 
    }); 
} 

それとも、一度それを使用してDropzone.confirmに外にあなたの関数を置くことができ、同様に複数回呼び出されているため.on()を使用する前.off()を使用する必要が

Uncaught TypeError: Cannot read property 'removeChild' of null

答えて

0

以下のように、

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); 
+0

最初の回答の作品の長さを確認することができます。私は、ボタンに適用されたイベントが複数回呼び出されることを意味するものではないことを十分に理解していませんが、機能します。 accept()コールバックがDropzone.confirmの外部で利用できないため、2番目の呼び出しは失敗します。ありがとうございました –

+0

私は、あなたのConfirm関数があなたの 'accept-confirm'クリックイベントをDOMにバインドする最初の呼び出しで、あなたのconfirm関数が呼び出すたびに何度もバインドすることを意味します。そのため、1つの要素に複数のクリックイベントが追加されています。だからあなたの 'hideConfirm'が' removeChild'の問題を何度も繰り返し呼び出すのです。 –

関連する問題