2014-06-12 15 views
10

Sto usando Dropzone.js per caricare file sul server. Ho impostato il mio parametro Dropzone maxFiles-10 e mi è stato provato questo:Come disabilitare il modulo cliccabile con Dropzone.js?

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

... ma non funziona. Qual è la soluzione da rimuovere cliccabile da .dropzone o in altro modo per impedire all'utente di aggiungere altri file?

+1

approccio migliore qui http://stackoverflow.com/a/19057630/1178072 – zsitro

+0

@zsitro Sì. Questo è un approccio interessante. Ma non vedo come questo disabiliti il ​​modulo cliccabile (la domanda posta). Cosa mi manca? – bloodyKnuckles

+1

@netdjw Ottima domanda. Anche l'attributo cliccabile sembra non funzionare. – kstratis

risposta

1

Eccoci, aggiornati in base ai commenti riportati di seguito.

Come disattivare la zona di lancio "click per aprire la finestra di file di dialogo" Evento quando viene raggiunta 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); 
     }); 
    } 

non so quanto è affidabile il "1" in this.listeners[1] è, ma è lì che il clic la funzione evento vive nella mia attuale configurazione dropzone.

+0

Voglio disabilitare solo dopo che l'utente ha attivato l'evento 'maxfilesreached'. Questa non è una buona soluzione per me. – netdjw

+0

Sto sperimentando con 'maxfilesexceeded', ma sembra che si attivi dopo che il' maxFiles' è stato superato, vale a dire dopo aver aggiunto il file # 11. – bloodyKnuckles

+0

e cosa succede al listener di eventi 'maxfilesreached'? Penso a questo fuoco quando ho aggiunto il decimo file. Sì? – netdjw

2

C'è un campo di opzione sull'oggetto Dropzone chiamato clickable che per impostazione predefinita è true.

A seconda dello scenario, è possibile impostarlo su false quando si registra l'istanza di Dropzone oppure è possibile aggiornare il valore in fase di runtime in base alle esigenze.

+1

È possibile impostare questo, ma non fa nulla. Dropzone è ancora cliccabile. –

9

Questo funziona PERFETTAMENTE !!! e funziona su 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

Questo è esattamente quello che stavo cercando – ChrisB

+0

ha fatto il trucco per me, +1 – Eman

23

Perché non usare semplicemente CSS per disabilitare l'evento click. Al raggiungimento dei file massimi, Dropzone aggiungerà automaticamente una classe di dz-max-files-reached.

usare i CSS per disabilitare click sulla zona di lancio: .dz-max-files-reached { pointer-events: none; cursor: default; }

+0

Questa dovrebbe essere la risposta accettata - è la soluzione più elegante che ho visto per questo. – huwiler

+0

@XuDing Risposta eccellente. Stavo cercando un modo per raggiungere questo obiettivo da secoli ma senza fortuna. CSS ha fatto il trucco! Grazie. – kstratis

+4

Quando si visualizza "Rimuovi collegamenti" si usa anche '.dz-remove {pointer-events: all; cursore: predefinito; } 'per tenerli cliccabili. – Atan

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

Non ti dimenticare init _updateMaxFilesReachedClass se si dispone di file dal server.

myDropzone._updateMaxFilesReachedClass() 
Problemi correlati