Ich versuche mit jQuery eine Upload-Box (Schaltfläche zum Durchsuchen) auszulösen.
Die Methode, die ich jetzt ausprobiert habe, ist:
$('#fileinput').trigger('click');
Aber es scheint nicht zu funktionieren. Bitte helfen Sie. Danke dir.
javascript
jquery
css
Alec Smart
quelle
quelle
Antworten:
Dies ist auf eine Sicherheitsbeschränkung zurückzuführen.
Ich habe herausgefunden, dass die Sicherheitsbeschränkung nur dann besteht, wenn das
<input type="file"/>
aufdisplay:none;
oder eingestellt istvisbilty:hidden
.Also versuchte ich es aus dem Bildfenster , indem die Positionierung
position:absolute
undtop:-100px;
und voilà es funktioniert.siehe http://jsfiddle.net/DSARd/1/
Nennen wir es einen Hack.
Hoffe das funktioniert bei dir.
quelle
left: -100px;
. Sie wissen nie, wie lange eine Seite sein könntedas hat bei mir funktioniert:
JS:
HTML:
CSS:
>>> Eine andere, die Cross-Browser funktioniert: <<<
Die Idee ist, dass Sie eine unsichtbare riesige Schaltfläche "Durchsuchen" über Ihre benutzerdefinierte Schaltfläche legen. Wenn der Benutzer auf Ihre benutzerdefinierte Schaltfläche klickt, klickt er tatsächlich auf die Schaltfläche "Durchsuchen" des nativen Eingabefelds.
JS Fiddle: http://jsfiddle.net/5Rh7b/
HTML:
CSS:
JavaScript:
quelle
height
empfohlen, zuheight: 100%
Sie können das LABEL-Element ex verwenden.
Dies löst die Eingabedatei aus
quelle
Ich habe es funktioniert (= getestet) in IE8 +, aktuelle FF und Chrome:
Die Taste fokussiert vor dem Auslösen des Klicks (andernfalls wird er von Chrome ignoriert).
Hinweis: Sie MÜSSEN Ihre Eingabe anzeigen und sichtbar machen (wie in, nicht
display:none
und nichtvisibility:hidden
). Ich schlage vor (wie viele andere zuvor), den Eingang absolut zu positionieren und vom Bildschirm zu werfen.quelle
Schau dir meine Geige an.
http://jsfiddle.net/mohany2712/vaw8k/
quelle
adardesign hat es geschafft, dass das Dateieingabeelement ignoriert wird, wenn es ausgeblendet ist. Ich bemerkte auch, dass viele Leute die Elementgröße auf 0 verschoben oder sie durch Positionierungs- und Überlaufanpassungen aus dem Rahmen schoben. Das sind alles großartige Ideen.
Eine alternative Methode, die ebenfalls einwandfrei zu funktionieren scheint, besteht darin , die Deckkraft auf 0 zu setzen . Dann können Sie immer nur die Position festlegen, um zu verhindern, dass andere Elemente wie beim Ausblenden versetzt werden. Es scheint nur ein wenig unnötig, ein Element um fast 10 KB Pixel in eine beliebige Richtung zu verschieben.
Hier ist ein kleines Beispiel für diejenigen, die eines wollen:
quelle
Aus Neugier können Sie etwas tun, was Sie möchten, indem Sie dynamisch ein Upload-Formular und eine Eingabedatei erstellen, ohne sie dem DOM-Baum hinzuzufügen:
Sie müssen die uploadForm nicht zum DOM hinzufügen.
quelle
Richtiger Code:
quelle
Das ist absichtlich und beabsichtigt. Es ist ein Sicherheitsproblem.
quelle
Eigentlich habe ich eine wirklich einfache Methode dafür gefunden, nämlich:
Auf diese Weise kann in Ihrem Dateieingabefeld die CSS-Eigenschaft auf keiner angezeigt werden und trotzdem den Handel gewinnen :)
quelle
Es ist zu spät, um zu antworten, aber ich denke, dass dieses minimale Setup am besten funktioniert. Ich suche auch das gleiche.
// css
jsbin
Demo der Eingabetasten für Bootstrap-Dateien
quelle
Dies ist eine sehr alte Frage, aber leider ist dieses Problem immer noch relevant und erfordert eine Lösung.
Die (überraschend einfache) Lösung, die ich mir ausgedacht habe, besteht darin, das eigentliche Dateieingabefeld zu "verbergen" und es mit einem LABEL-Tag zu versehen (kann zur Verbesserung auf Bootstrap und HTML5 basieren).
See here:
Beispielcode hierAuf diese Weise ist das Eingabefeld für die reale Datei unsichtbar und Sie sehen nur die angepasste "Schaltfläche", die tatsächlich ein modifiziertes LABEL-Element ist. Wenn Sie auf dieses LABEL-Element klicken, wird das Fenster zur Auswahl einer Datei geöffnet und die von Ihnen ausgewählte Datei wird in das Eingabefeld für die reale Datei verschoben.
Darüber hinaus können Sie das Aussehen und Verhalten nach Ihren Wünschen ändern (z. B. den Namen der ausgewählten Datei nach der Auswahl aus der Dateieingabedatei abrufen und irgendwo anzeigen. Das LABEL-Element führt dies nicht automatisch aus. Natürlich. Normalerweise lege ich es einfach als Textinhalt in das ETIKETT.
Aber Vorsicht! Die Manipulation des Aussehens und Verhaltens ist auf alles beschränkt, was Sie sich vorstellen und denken können. ;-) ;-)
quelle
Ich habe es mit einem einfachen $ (...) geschafft. Click (); mit JQuery 1.6.1
quelle
oder einfach
quelle
Ich hatte Probleme mit der benutzerdefinierten clientseitigen Validierung,
<input type="file"/>
während ich eine gefälschte Schaltfläche zum Auslösen verwendete, und die Lösung von @Guillaume Bodi funktionierte für mich (auch mitopacity: 0;
auf Chrom).und CSS-Stil für Upload-Eingabe
quelle
Versuchen Sie dies, es ist ein Hack. Die Position: absolut ist für Chrome und Trigger ('change') ist für IE.
quelle
$.browser
in neueren Versionen von jQueryMein Problem war unter iOS 7 etwas anders. Es stellte sich heraus, dass FastClick Probleme verursachte. Alles was ich tun musste, war
class="needsclick"
meinen Button hinzuzufügen .quelle
Dies ist wahrscheinlich die beste Antwort, wenn man die browserübergreifenden Probleme berücksichtigt.
CSS:
JS:
HTML:
quelle
Ich glaube, ich verstehe dein Problem, weil ich ein ähnliches habe. Damit das Tag
<label>
das Attribut für hat, können Sie dieses Attribut verwenden, um Ihre Eingabe mit type = "file" zu verknüpfen. Wenn Sie dies jedoch nicht mit dieser Bezeichnung aktivieren möchten, weil dies eine Regel Ihres Layouts ist, können Sie dies tun.Natürlich werden Sie dies für Ihren eigenen Zweck und Ihr eigenes Layout anpassen, aber das ist der einfachere Weg, den ich kenne, damit es funktioniert !!
quelle
Basierend auf Guillaume Bodis Antwort habe ich Folgendes getan:
Das heißt, es wird zunächst ausgeblendet und dann für den Auslöser angezeigt und dann sofort wieder ausgeblendet.
quelle