2009-07-22 14 views

Respuesta

23

El botón no se le llama el "botón Examinar" - eso es sólo el nombre de su navegador da para ello. Los navegadores son libres de implementar el control de carga de archivos como deseen. En Safari, por ejemplo, se llama "Elegir archivo" y está en el lado opuesto de lo que probablemente esté usando.

Puede implementar una apariencia personalizada para el control de carga usando the technique outlined on QuirksMode, pero eso va más allá de simplemente cambiar el texto del botón.

2

La entrada type = "archivo" de campo es muy complicado porque se comporta de manera diferente en todos los navegadores, no puede ser de estilo, o puede ser de estilo un poco, dependiendo del navegador una vez más; y es difícil cambiar el tamaño (dependiendo del navegador nuevamente, puede tener un tamaño mínimo que no se puede sobrescribir).

Aunque hay algunas soluciones. El mejor es en mi opinión this one (el resultado es here).

0

No, no puede cambiar el texto de la entrada de carga de archivos. Pero hay algunos trucos para superponer una imagen sobre el botón.

1

AFAIK no puede cambiar el texto del botón, está codificado en los navegadores.

Sin embargo, hay varias soluciones para poner un botón de texto/imagen distinta con una forma:

link

0

También puede usar Uploadify, que es un gran plugin de carga de jQuery, le permite cargar varios archivos y también estilo los campos del archivo fácilmente. http://www.uploadify.com

5

Un poco de JavaScript se encargará de que:

<script language="JavaScript" type="text/javascript"> 
function HandleBrowseClick() 
{ 
    var fileinput = document.getElementById("browse"); 
    fileinput.click(); 
    var textinput = document.getElementById("filename"); 
    textinput.value = fileinput.value; 
} 
</script> 

<input type="file" id="browse" name="fileupload" style="display: none"/> 
<input type="text" id="filename" readonly="true"/> 
<input type="button" value="Click to select file" id="fakeBrowse" onclick="HandleBrowseClick();"/> 

No es la mejor solución en busca, pero funciona.

+0

Esto será completamente inutilizable si JS no está disponible. (El HTML no es válido también). – Quentin

+0

@David Dorwad: Gracias por señalar lo obvio (que JS no funciona cuando JS no está disponible). Sin embargo, el caso del mundo real en el que esto sucedería es extremadamente raro. Además, no tenía la intención de que nadie copie y pegue esto ciegamente y lo use de inmediato, fue pensado como un puntero para mostrar una posible forma de lograr el objetivo en cuestión. Pero oye, gracias por disuadirme de postear de nuevo. – korona

+0

El punto es que el HTML no funciona si el JS no está disponible. Una solución decentemente escrita se degradaría con gracia y no volvería a una posición donde había un botón que no hacía nada. – Quentin

28
<script language="JavaScript" type="text/javascript"> 
function HandleBrowseClick() 
{ 
    var fileinput = document.getElementById("browse"); 
    fileinput.click(); 
} 
function Handlechange() 
{ 
var fileinput = document.getElementById("browse"); 
var textinput = document.getElementById("filename"); 
textinput.value = fileinput.value; 
} 
</script> 

<input type="file" id="browse" name="fileupload" style="display: none" onChange="Handlechange();"/> 
<input type="text" id="filename" readonly="true"/> 
<input type="button" value="Click to select file" id="fakeBrowse" onclick="HandleBrowseClick();"/> 

http://jsfiddle.net/J8ekg/

+1

Utilicé este enfoque y realmente me siento cómodo con él. Pero hay una cosa principal que cambiar: si aplica pantalla: ninguna a esa entrada, el clic no funciona, así que mejor vaya con opacidad: 0 ;. ¡¡¡Gracias!!! – cbarg

+0

opcaity no es compatible con navegadores antiguos, así que ten cuidado con eso. –

+0

Ahora me pregunto qué pasaría si quiero enviar otra variable, llamémosla 'group_id'. ¿Cómo debería enviarlo? en el HTML '' pero en el script? – cbarg

3

Puede hacerlo con una simple solución css/JQ: Crear un botón falso que desencadena el botón de exploración que está oculto.

HTML

<input type="file"/> 
<button>Open</button> 

CSS

input { display: none } 

jQuery

$('button').click(function(e) { 
    e.preventDefault(); // prevents submitting 
    $('input').trigger('click'); 
}); 

demo

+1

Aquí asegúrese de que el botón sea 'type =" button "' o enviará el formulario. – Mihai

+0

JavaScript ya lo previene. – Thielicious

5
  1. Wrap el <input type="file"> con una etiqueta <label>;
  2. Agregue una etiqueta (con el texto que necesita) dentro de la etiqueta, como <span> o <a>;
  3. Haga que esta etiqueta parezca un botón;
  4. Hacer input[type="file"] invisible a través de display: none.
Cuestiones relacionadas