2014-06-12 102 views
10

我使用Dropzone.js將文件上傳到服務器。我在我的懸浮窗maxFiles參數設置多達10個,我是試過這樣:如何禁用Dropzone.js可點擊表單?

$('.dropzone').dropzone({ 
    maxFiles: 10, 
    init: function() { 
     this.on('maxfilesreached', function() { 
      $('.dropzone').unbind('click'); 
     }); 
    } 
}); 

...但不工作。從.dropzone或任何其他方式刪除clickable以防止用戶添加更多文件的解決方案是什麼?

+1

更好的方法在這裏http://stackoverflow.com/a/19057630/1178072 – zsitro

+0

@zsitro是的。這是一個很酷的方法。但我不明白這是如何禁用可點擊的表單(提出的問題)。我錯過了什麼? – bloodyKnuckles

+1

@netdjw優秀的問題。可點擊的屬性似乎也沒有工作。 – kstratis

回答

1

這裏我們去,根據下面的評論進行更新。

如何禁用懸浮窗「點擊打開文件對話框」事件達到MAXFILES時:

$('.dropzone').dropzone({ 
    maxFiles: 10, 
    init: function() { 
     this.on('maxfilesreached', function() { 
      $('.dropzone').removeClass('dz-clickable'); // remove cursor 
      $('.dropzone')[0].removeEventListener('click', this.listeners[1].events.click); 
     }); 
    } 

我不知道this.listeners[1]的「1」有多可靠,但是這是點擊這裏事件函數存在於我當前的dropzone配置中。

+0

我想僅在用戶激活'maxfilesreached'事件後禁用。這對我來說不是一個好的解決方案。 – netdjw

+0

我一直在試驗'maxfilesexceeded',但是在maxFiles被超過後,即在添加文件#11後,它似乎會觸發。 – bloodyKnuckles

+0

和'maxfilesreached'事件監聽器有什麼關係?當我添加第10個文件時,我認爲這起火了。是? – netdjw

2

Dropzone對象上有一個選項字段,名稱爲clickable,默認爲true

根據您的場景,您可以在註冊Dropzone實例時將其設置爲false,或者可以根據需要在運行時更新值。

+1

你可以設置它,但它什麼都不做。 Dropzone仍然是可點擊的。 –

9

這工作完美!並適用於4.0.1

//disable the click of your clickable area 
$(".dz-hidden-input").prop("disabled",true); 

//enalbe the click of your clickable area 
$(".dz-hidden-input").prop("disabled",false); 
+1

這就是我正在尋找的 – ChrisB

+0

爲我做了訣竅,+1 – Eman

23

你爲什麼不只是使用CSS來禁用Click事件。 達到最大文件時,Dropzone會自動添加一個dz-max-files-reached類。

使用CSS來對懸浮窗關閉點擊: .dz-max-files-reached { pointer-events: none; cursor: default; }

+0

這應該是公認的答案 - 這是我見過的最優雅的解決方案。 – huwiler

+0

@XuDing優秀的答案。我一直在尋找一種能夠實現這個目標的方法,但沒有運氣。 CSS做到了!謝謝。 – kstratis

+4

當顯示「刪除鏈接」時,另外使用'.dz-remove {pointer-events:all;光標:默認; }'讓他們點擊。 – Atan

4
myDropzone.on('maxfilesreached', function() { 
    myDropzone.removeEventListeners(); 
}); 
myDropzone.on('removedfile', function (file) { 
    myDropzone.setupEventListeners(); 
}); 

不要忘了初始化_updateMaxFilesReachedClass,如果你從你的服務器所擁有的文件。

myDropzone._updateMaxFilesReachedClass()