Giacomo Furlan
Utente Attivo
- Messaggi
- 378
- Reazioni
- 91
- Punteggio
- 58
Sicuro che gli identificativi (id) corrispondano tra HTML e JS? Sembra non riesca a trovare l'input!
Segui il video qui sotto per vedere come installare il nostro sito come web app sulla tua schermata principale.
Nota: Questa funzionalità potrebbe non essere disponibile in alcuni browser.
Pubblicità
Sicuro che gli identificativi (id) corrispondano tra HTML e JS? Sembra non riesca a trovare l'input!
Ottimista...Ora puoi cavartela con le tue gambe, penso :D
1. Anteprima del file da caricare: hint - tag img con src in base64, unito ad un file reader di javascript al momento del drop del file (vai di Google!)
2. Eliminare cliccandoci sopra: una cosa alla volta :P (dovresti creare una lista dei file, associarli alla lista in input, creare un bottone e gestirlo tramite javascript)
3. Upload multiplo: hint: append (qualcuno ha detto javascript array push?) anziché la sostituzione (assegnazione) della lista dei file dell'input
Automaticamente c'è ben poco :D - come neofita credo che ti stia imbarcando in un compito molto più complesso di quel che pensi.
Per i punti 1 e 2, in teoria, se vuoi creare dei quadrati puoi inserire all'interno del div di drop dei tag img creati dinamicamente tramite javascript (document.createElement e poi dropZone.appendChild). Una volta creato l'elemento puoi aggiungere un event listener che, all'evento 'click', lo cancelli dal DOM (dropZone.removeChild) e, iterando i file dell'input, elimini il file dalla lista. Certo l'input deve avere l'attributo multiple. Come vedi non è proprio semplice.
3. Al posto dell'assegnazione usi il metodo... se leggi il codice dovresti facilmente trovare la linea (fileInput.files = ev.dataTransfer.files come vedi è abbastanza parlante)... qualcosa come fileInput.files.push(ev.dataTransfer.files[0]) (files è anch'esso un array e qui accedi al suo primo (ed ultimo) elemento).
4. Ignora i controlli lato javascript, tanto possono essere facilmente bypassati ed aggiungono solo complessità che, per il momento, fatichi a gestire.
Ahahah no :) fileInput è un nodo di tipo input (maddai? :D) il quale ha un attributo chiamato files (che è un array di non ricordo esattamente l'oggetto, ma fondamentalmente... file). Quindi fileInput.files è un array, e come ogni array ha il metodo push :)
dropZone.addEventListener('dragover', function (ev) {
ev.preventDefault();
})