2009-07-15 5 views
5

Ich habe einen <img ... /> Tag, an den ich ein Click-Ereignis in jQuery gebunden habe. Wenn Sie darauf klicken, möchte ich den Klick auf eine Schaltfläche beim Hochladen der Datei emulieren, um das Popup-Fenster zum Durchsuchen des Dateisystems zu öffnen. Ich habe diese Dinge in der Klick-Funktion versucht und hatte keinen Erfolg:Emulieren Sie einen Dateiupload klicken Sie in jQuery

... 
$(".hiddenUploadBtn").click(); 
... 

... 
$(".hiddenUploadBtn").select(); 
... 

... 
$(".hiddenUploadBtn").submit(); 
... 
+0

Sie sollten Adam McCormicks neue Antwort akzeptieren, die nachweislich korrekt ist. Ich möchte meins löschen, aber ich kann nicht, solange es die akzeptierte Antwort ist. – RichieHindle

+0

Akzeptierte Antwort wurde aktualisiert. Danke für den Kommentar. –

Antwort

5

Nur wickeln die das img in einem Label und legen Sie für das Attribut zur Dateieingabe. Funktioniert für jede Art von Inhalt und ist in die Spezifikation integriert. Sie können die Dateieingabe zu diesem Zeitpunkt sogar ausblenden.

<input type="file" id="fileUpload"><br> 
<label for="fileUpload"> 
    <img src="https://www.google.com/images/srpr/logo11w.png" /> 
</label> 
+2

+1: Ausgezeichnet! JSFiddle hier: http://jsfiddle.net/RichieHindle/GCNEK/ – RichieHindle

-1

Die Spezifikation sagt, dass es funktionieren soll, und es tut, auf Chrome. Firefox und andere gängige Browser folgen jedoch nicht den Regeln, also sind Sie SOL.

+2

Bitte poste einen Link zu der Spezifikation, auf die du dich beziehst. Außerdem gibt es einen Unterschied zwischen den "Spec" - und den Browser-Implementierungen. Zum Beispiel, machen alle Browser CSS-Rendering, wie es für die Spezifikation erforderlich ist? Offensichtlich nicht. Nur weil die Spezifikation sagt, dass es funktionieren sollte, bedeutet das nicht, dass der Browser es funktionieren lässt. –

2

Dies funktioniert für mich

<input name="picture" type="file" onchange="alert(this.value)" class="file" size=20/> 

für diese Verwendung Upload-Button als Bild versuche

<style> 
div.fileinputs {position:relative; display:inline;} 
div.fakefile {position:absolute; top:0px; left:0px; z-index:1;} 
input.file {position:relative; text-align:right; -moz-opacity:0; filter:alpha(opacity: 0); opacity: 0; z-index:2;} 
<style> 

<div class="fileinputs"> 
    <input name="picture" type="file" onchange="alert(this.value)" class="file" size=1/> 
    <div class="fakefile"> 
    <img src="images/browse.gif" align="middle" alt="browse" title="browse"/> 
    </div> 
</div> 

so das Eingabefeld verborgen ist, und wenn u das Bild klicken - der Auswahldialog angezeigt wird, aber emulieren dieser Dialog von js imposible, yep. Sie können aber auch das Plugin/Hack für Browser)

5

Versuchen Sie dieses mit nur Javascript schreiben: http://code.google.com/p/upload-at-click/

Demo: http://upload-at-click.narod.ru/demo2.html

+0

Dies ist PHP-basiert, einige Leute sind nicht auf der Suche nach einer PHP-Lösung. – Chexpir

+0

Ich verwende diese 'js' Datei. Es funktioniert großartig .. In Chrome & IE können wir den vollständigen Pfadnamen erhalten, aber in Mozilla können wir den vollen Pfad nicht bekommen. wir können nur Dateinamen bekommen ... Also, wie bekommen wir den vollen Weg in Mozilla? –

Verwandte Themen