Skip to content

Allt om WordPress, webbutveckling — och mer därtill

📂 Dra och släpp på uppladdningsknappen: en dold webbläsarfunktion

📂 Dra och släpp på uppladdningsknappen: en dold webbläsarfunktion

De flesta användare har ingen aning: för att ladda upp en fil till en webbplats behöver du inte sikta på den lilla "Välj fil"-knappen och navigera genom filhanteraren. En enkel rörelse räcker, dra filen från din filutforskare rakt på den knappen.

Det här är inget plugin eller resultatet av ett smart skript. <input type="file">, ett standard HTML-element, har inbyggt stöd för dra-och-släpp på webbläsarnivå. Ingen JavaScript, inga bibliotek, inga dropzoner. Beteendet beskrivs i HTML-specifikationen och har fungerat sedan åtminstone mitten av 2010-talet.

Techbloggens team testade tricket på ett dussin webbplatser. Det fungerar överallt där ett inbyggt <input type="file"> används: ladda upp tillägg till WordPress admin, skicka skanningar till teknisk support, bifoga CV:n på HR-portaler. Inga fel, inget dansande med filhanteraren.

💡 Snabb översikt:

  • Dra en fil från din filutforskare till "Välj fil"-knappen i valfritt formulär, så lägger webbläsaren automatiskt in filen i input-fältet.
  • Ingen kod behövs: inbyggt <input type="file"> tar emot filer via dra-och-släpp som standard.
  • Stöd för flera filer fungerar via attributet multiple: markera en grupp i din filutforskare, dra över dem, hela batchen skickas till servern i en operation.
  • Mobila enheter stöder inte detta trick: pekskärmsgränssnitt implementerar inte dragning mellan applikationer.

Denna korta video demonstrerar hur <input type="file"> fungerar och de grundläggande principerna för filuppladdning i webbläsaren. Att förstå dessa grunder hjälper dig inse varför dra-och-släpp på knappen fungerar utan extra kod.

Var detta fungerar

Funktionen fungerar på dator i alla moderna webbläsare. Vi testade på Chrome, Firefox, Safari (macOS), Vivaldi och Edge på Chromium, filen accepteras korrekt i var och en av dem. Enligt data från Can I Use har stödet täckt över 95% av datoranvändarna i flera år nu.

Om fältet har attributet multiple kan du dra en hel grupp filer på en gång. Webbläsaren lägger till dem alla i uppladdningskön, och efter att formuläret skickats tar servern emot en array med filer på standardvis. I praktiken snabbar detta upp medieuppladdningar i WordPress radikalt: markera ett dussin bilder i din filutforskare, dra dem till "Välj filer"-knappen i mediebiblioteket, så går hela batchen till servern. Inget plockande en och en via en dialogruta.

Mobila enheter stöder inte detta trick. Pekskärmsgränssnitt implementerar inte dragning mellan applikationer i den form som finns på dator. Men för datoranvändare sparar varje uppladdning 5-10 sekunder och tar bort den kognitiva belastningen av att navigera genom mappträd.

Viktig brasklapp: tricket fungerar bara med inbyggt <input type="file">. Om en webbplats använder ett anpassat element, en stylad <div> eller <button> som programmatiskt öppnar fildialogen, kommer dragning inte att fungera. På samma sätt, om webbplatsens JavaScript fångar upp dragover- och drop-händelser på dokumentnivå och anropar e.preventDefault(), blockeras webbläsarens inbyggda beteende.

Varför ingen pratar om det

Paradoxen: funktionen har funnits i webbläsare i minst ett decennium, men genomsnittsanvändaren känner inte till den. Utvecklare är ofta inte heller medvetna: vanan att omedelbart sträcka sig efter dra-och-släpp-bibliotek väger tyngre än lusten att kolla det inbyggda beteendet.

Därav de mängder av handledningar om anpassade dropzoner. Samma artikel på CSS-Tricks bryter ner en JavaScript-implementation i detalj med dragover- och drop-hanterare, läsning av filer via FileReader. Under tiden samlar webbläsarens grundläggande förmåga damm i skuggorna.

Varför utvecklare fortfarande skriver sina egna dropzoner:

  • Visuell återkoppling. Inbyggd uppladdning markerar inte knappen när man hovrar en fil, och användaren förstår inte att dragning kommer att fungera. En anpassad dropzone ger en stylad kontur, bakgrundsbyte, animation.

  • Förhandsvisning och validering. En JavaScript-implementation visar en bildminiatyr före uppladdning, kontrollerar filstorlek och typ på klientsidan, visar en förloppsindikator.

  • Flera zoner. När en sida har flera oberoende uppladdningspunkter, till exempel ett profilfoto och ett galleri på ett personligt konto, behöver du tydlig koppling av filen till ett specifikt fält.

Inbyggt stöd eliminerar inte dessa scenarier. Men i enkla formulär, ladda upp ett dokument till teknisk support, skicka ett CV, installera ett tillägg i WordPress admin, behövs anpassad kod helt enkelt inte. Webbläsaren kan redan göra allt.

Hur man lägger till visuell återkoppling med ett par rader

Om du behöver behålla det inbyggda beteendet men ge användaren en visuell ledtråd räcker minimal CSS och JavaScript. Koden nedan markerar filvalsknappen när man hovrar en dragen fil, utan att röra själva uppladdningsmekanismen.

Skapa en wrapper runt <input type="file"> i märkspråket:

1<div class="file-upload-wrapper">
2 <input type="file">
3</div>

Skriptet hängs på hela dokumentet, inte på en specifik input, eftersom dragover-händelsen avfyras när man går in i webbläsarfönstret. När dragning upptäcks läggs klassen drag-over till på wrappern:

1const fileInput = document.querySelector('input[type="file"]');
2const wrapper = fileInput.closest('.file-upload-wrapper');
3
4document.addEventListener('dragover', (e) => {
5 e.preventDefault();
6 wrapper?.classList.add('drag-over');
7});
8
9document.addEventListener('dragleave', (e) => {
10 if (!e.relatedTarget || e.relatedTarget === document.documentElement) {
11 wrapper?.classList.remove('drag-over');
12 }
13});
14
15document.addEventListener('drop', (e) => {
16 e.preventDefault();
17 wrapper?.classList.remove('drag-over');
18});

Klassen drag-over stylas med en rad CSS. Nedan, en blå streckad kontur och ljus bakgrundsfyllning, som signalerar "släpp här":

1.file-upload-wrapper.drag-over input[type="file"] {
2 outline: 2px dashed #2563eb;
3 background: rgba(37, 99, 235, 0.05);
4}

Filen hamnar fortfarande i input-fältet på inbyggt vis. JavaScript rör inte uppladdningsmekanismen, lägger bara till visuell återkoppling. Ingen FileReader, ingen manuellt konstruerad FormData.

Om du behöver mer, validering av typ och storlek före inskick, bildförhandsvisning, förloppsindikator, då är det vettigt att titta mot en fullfjädrad anpassad dropzone. Som tur är har MDN och web.dev dokumenterat denna process från början till slut.

⁉️🤔 Vanliga frågor

Fungerar detta i WordPress?

Ja, standarduppladdaren i WordPress (tillägg, teman, mediebibliotek) är byggd på inbyggt <input type="file">. Dragning fungerar direkt i admin utan ytterligare tillägg. Den enda nyansen: mediebiblioteket i rutnätsläge använder en anpassad dropzone ovanpå det inbyggda fältet, så den visuella återkopplingen där är rikare, men grundmekanismen är densamma. Verifierat på WordPress-versioner från 5.0 till 6.7.

Vilka filformat stöds?

Webbläsaren inför inga formatbegränsningar vid dragning: filen skickas till input-fältet som den är. Om fältet har ett accept-attribut (till exempel accept="image/*,.pdf") slår filtrering till på input-nivå precis som när man väljer via fildialogen. Filer av icke-stödda typer kommer att döljas från kön.

Är dragning säkert?

Absolut. Att dra en fil till <input type="file"> ger inte webbplatsen åtkomst till användarens filsystem. Webbläsaren skickar bara själva filen (eller en array av filer med multiple), men inte dess sökväg på disken. Säkerhetsmodellen är densamma som vid uppladdning via standardvalsdialogen: webbplatsen vet inte vilken mapp filen kom från och kan inte läsa andra filer i närheten.

Varför fungerar inte dragning på vissa webbplatser?

Två orsaker. För det första: webbplatsen använder inte ett inbyggt <input type="file">, utan ett anpassat element, en stylad <div> eller <button> som programmatiskt öppnar fildialogen. Inbyggda dra-och-släpp-händelser är inte bundna till ett sådant element. För det andra: webbplatsens JavaScript fångar upp dragover- och drop-händelser på dokumentnivå och anropar e.preventDefault(), vilket blockerar webbläsarens standardbeteende. Vanligtvis fångar utvecklare dessa händelser för sin egen dropzone och förväntar sig inte att detta ska bryta inbyggd uppladdning.

Kan jag dra en fil från en webbläsare till en annan?

Nej. Mekanismen fungerar bara från operativsystemets filhanterare in i webbläsarfönstret. Dragning mellan flikar eller från en webbläsare till en annan stöds inte: webbläsarens säkerhetsmodell tillåter inte åtkomst till en annan kontexts filsystem.

Vad man ska använda: dropzone eller inbyggd knapp

Tricket att dra till filvalsknappen sparar tid och minskar friktion. Inget behov av att sträcka sig efter musen, sikta på "Bläddra"-knappen, navigera genom mappträdet. En rörelse, och filen är redan i formuläret.

För enkla scenarier, ladda upp dokument, skanningar, arkiv, installera tillägg i WordPress, är inbyggt beteende med lätt visuell förstärkning mer än tillräckligt. Innan du kopplar in kilobyte av JavaScript för en anpassad dropzone, kolla: kanske har ditt formulär nog av det webbläsaren redan kan.

Om du administrerar WordPress-webbplatser, prova vid din nästa uppdatering att dra ett tillägg eller tema rakt på uppladdningsknappen. Du kommer sannolikt att bli förvånad över hur mycket enklare det är än att navigera i filhanteraren.