2016-10-27 4 views
3

Ich schreibe Dokumentation für eine Webplattform und möchte in meinen Anweisungen auf eine Schaltfläche zum Hochladen von Dateien verweisen. Der genaue Text auf der Schaltfläche hängt jedoch vom Browser ab. Zum Beispiel ruft Firefox es Browse... und Chrome nennt es Choose File.Wie kann ich den Text einer Dateiupload-Schaltfläche erhalten?

<input type="file"> 

Ist es möglich, den Zugriff auf diesen Text programmatisch (nicht ändern)? Ich weiß, dass ich den Browser erkennen und den Text in der Dokumentation entsprechend einstellen kann, oder sogar eine Problemumgehung benutze, um den Schaltflächentext zu setzen, aber das ist nicht das, wonach ich frage.

+0

Was meinst du mit "access"? – guest271314

+1

Er möchte den tatsächlichen Text in seine Dokumentation ziehen, basierend auf dem tatsächlichen Text auf der Schaltfläche, basierend auf dem Browser, den der Benutzer verwendet, aber ohne auf die Browser-Informationen zugreifen zu müssen. – junkfoodjunkie

+0

Leider löschte jemand ihre Antwort, also werde ich auf eine Antwort von einer anderen Frage zeigen: http://stackoverflow.com/a/21842275/34806 –

Antwort

2

Dieser Text wird festgelegt, indem der Browser dieses spezifische HTML-Element rendert. Es gibt keine Möglichkeit, auf diesen Text zuzugreifen oder ihn zu ändern. Es wird niemals in das DOM geladen, daher ist auch das Finden über jQuery keine Option.

Für Ihre Dokumentation, möchten Sie vielleicht, was die IE-Version des Textes sein wird, dann Liste Chrome, Safari, Firefox, etc. Es ist die beste Weise, die ich vorstellen kann, um den Benutzer zu erklären.

EDIT

dachte, ich würde aktualisieren und Schatten DOM erwähnen, weil es für mich interessant und neu ist. Sie können dies in Chrome Dev Tools -> Einstellungen -> Benutzer-Agent-Schatten-DOM aktivieren aktivieren. Dort können Sie das gerenderte Steuerelement und den darauf gesetzten Text sehen. Es ist zwar programmgesteuert nicht durch clientseitiges Scripting zugänglich. :(

+0

_ "Es gibt keine Möglichkeit, auf diesen Text zuzugreifen oder ihn zu ändern."_ Es ist möglich, die' ShadowDOM' des Elements zu sehen, das '' Element enthält, wobei '.value' der gerenderte Text bei Chrom, Chrom ist. – guest271314

+0

Ich habe keine Erfahrung damit. Aber würde es nicht nur nützlich sein, wenn der Benutzer Chrome verwendet, dann? – CrazyPaste

+0

Haben noch keine Möglichkeit gefunden, die 'ShadowDOM' von' 'Element bei Firefox zu sehen. Wird jeden Abend versuchen. Es ist nicht möglich," zuzugreifen (nicht ändern) dass Text programmatisch ". – guest271314

1

Sie können ein Label für die input_id verwenden und die Eingabe verbergen

Beispiel:..

label { 
 
/*Just to simulate a button, you will put your button style*/ 
 
    -webkit-appearance: button; 
 
    -moz-appearance: button; 
 
    appearance: button; 
 
    text-decoration: none; 
 
    color: initial; 
 
} 
 

 
input { 
 
/*hide the inout*/ 
 
    width: 0px; 
 
    outline:none; 
 
    opacity:0; 
 
    visibility:none; 
 
    height:0px; 
 
    display:none; 
 
}
<label for="b1"> 
 
    Name 
 
    <input type="file" id="b1"> 
 
</label>

Arbeits DEMO

+2

Ciao Paolo, Ich möchte den Standardtext erhalten, nicht ändern. – fenceop

+3

@fenceop Es ist nicht möglich, "den Standardtext" des '.value' des' 'Elements innerhalb' '' ShadowDOM' zu erhalten, das den Text rendert. – guest271314

0

Ist es möglich, auf diesen Text programmatisch zugreifen (nicht ändern)?

Nein, es ist nicht möglich, die .value des <input> Element innerhalb <input type="file"> ShadowDOM zuzugreifen, die programmatisch den Text macht. Die .shadowRoot Eigenschaft von <input type="file"> DOM Element, in dem ShadowDOM angezeigt wird, wird auf null festgelegt.

Chrome, macht Chrom die .value von <input type="button" value="Choose File" pseudo="-webkit-file-upload-button"> bei ShadowDOM von <input type="file"> Element bei .computedName Eigenschaft input type="file" Element

const UPLOAD_BUTTON_TEXT = document.querySelector("input[type=file]") 
 
.computedName; 
 
console.log(UPLOAD_BUTTON_TEXT);
<input type="file" />


Bei Chrom, Chrom Sie das Element anzeigen können

<input type="button" value="Choose File" pseudo="-webkit-file-upload-button"> 

die den Text in host<input type="file"> Element rendert durch DevTools Öffnen Auswählen Settings, Show user agent shadow DOM Überprüfung, dann das Inspizieren <input type="file"> Element.

<input type="file">

+0

Es löst also nicht wirklich sein Problem, programmatisch darauf zugreifen zu können. Obwohl es die interessanteste Sache ist, die ich über Dev-Tools in einer LANGE Zeit gelernt habe. – CrazyPaste

+0

@CrazyPaste Das "Problem" kann derzeit nicht gelöst werden. Auf den '.value' kann nicht programmgesteuert mit clientseitigem' javascript' zugegriffen werden – guest271314

Verwandte Themen