¿Hay alguna forma de que el elemento de estilo (o script) <input type=file />
tenga visible solo el botón "Examinar" sin campo de texto?
Gracias
Editar : solo para aclarar por qué necesito esto. Estoy usando el código de carga de múltiples archivos de http://www.morningz.com/?p=5 y no necesita un campo de texto de entrada porque nunca tiene valor. El script simplemente agrega el archivo recién seleccionado a la colección en la página. Se vería mucho mejor sin campo de texto, si es posible.
javascript
html
css
Andrija
fuente
fuente
Me estaba divirtiendo muchísimo tratando de lograr esto. No quería usar una solución Flash, y ninguna de las bibliotecas jQuery que miré era confiable en todos los navegadores.
Se me ocurrió mi propia solución, que se implementa completamente en CSS (excepto por el cambio de estilo al hacer clic para hacer que el botón parezca "presionado").
Puede probar un ejemplo de trabajo aquí: http://jsfiddle.net/VQJ9V/307/ (Probado en FF 7, IE 9, Safari 5, Opera 11 y Chrome 14)
Funciona creando una entrada de archivo grande (con tamaño de fuente: 50 px), luego envolviéndola en un div que tiene un tamaño fijo y un desbordamiento: oculto. La entrada solo es visible a través de esta "ventana" div. Al div se le puede dar una imagen o color de fondo, se puede agregar texto y la entrada se puede hacer transparente para revelar el fondo div:
HTML:
CSS:
Avíseme si hay algún problema e intentaré solucionarlo.
fuente
Hoy desperdicié mi día haciendo que esto funcione. No encontré ninguna de las soluciones aquí trabajando en cada uno de mis escenarios.
Entonces recordé que vi un ejemplo para la carga de archivos JQuery sin cuadro de texto. Entonces, lo que hice fue tomar su ejemplo y reducirlo a la parte relevante.
Esta solución al menos funciona para IE y FF y se puede diseñar completamente. En el siguiente ejemplo, la entrada del archivo está oculta bajo el elegante botón "Agregar archivos".
fuente
Oculte el elemento del archivo de entrada y cree un botón visible que activará el evento de clic de ese archivo de entrada.
Prueba esto:
CSS
HTML:
JAVASCRIPT (jQuery):
fuente
Oculte la etiqueta del archivo de entrada con css, agregue una etiqueta y asígnela al botón de entrada. se podrá hacer clic en la etiqueta y, cuando se haga clic, se abrirá el cuadro de diálogo del archivo.
Agregue el estilo a la etiqueta como un botón.
Demo en vivo
fuente
onchange
controlador alinput
para permitir que un código JS recoja la información del archivo cargado.Eso va a ser muy difícil. El problema con el tipo de entrada de archivo es que generalmente consta de dos elementos visuales, mientras se trata como un único elemento DOM. Agregue a eso que varios navegadores tienen su propio aspecto distintivo para la entrada del archivo, y está listo para la pesadilla. Vea este artículo en quirksmode.org sobre las peculiaridades que tiene la entrada del archivo. Te garantizo que no te hará feliz (hablo por experiencia).
[EDITAR]
En realidad, creo que podría salirse con la suya introduciendo un elemento contenedor (como un div) y agregando un margen negativo al elemento. Ocultando efectivamente la parte del cuadro de texto fuera de la pantalla. Otra opción sería utilizar la técnica en el artículo que vinculé, para tratar de darle estilo como un botón.
fuente
Solución para trabajar en todos los navegadores RESUELTOS:
He probado en FF, Chrome e IE, trabajando bien, estilos aplicados también: D
fuente
Traté de implementar las dos soluciones principales, y terminó siendo una enorme pérdida de tiempo para mí. Al final, la aplicación de esta clase .css resolvió el problema ...
¡Hecho! super limpio y super simple ...
fuente
Otra forma fácil de hacer esto. Haga una etiqueta de "archivo de tipo de entrada" en html y escóndela. Luego haga clic en un botón y formatee según las necesidades. Después de esto, use javascript / jquery para hacer clic programáticamente en la etiqueta de entrada cuando se hace clic en el botón.
HTML: -
JavaScript: -
jQuery: -
CSS: -
Aquí hay un violín JS que funciona para lo mismo: - http://jsfiddle.net/32na3/
fuente
Utilicé algunos de los códigos recomendados anteriormente y después de muchas horas de perder mi tiempo, finalmente llegué a una solución libre de bolsas css.
Puede ejecutarlo aquí: http://jsfiddle.net/WqGph/
pero luego encontré una mejor solución: http://jsfiddle.net/XMMc4/5/
fuente
onchange
evento no se activa para elinput
elemento oculto .Aquí está mi buen remedio:
Al menos funcionó en Safari.
Llano y simple.
fuente
Puede etiquetar una imagen para que cuando haga clic en ella, se active el evento de clic del botón. Simplemente puede hacer que el botón normal sea invisible:
Funcionó para mí en todos los navegadores, y es muy fácil de usar.
fuente
Puede enviar el evento click en una entrada de archivo oculta como esta:
fuente
var ev = document.createEvent('HTMLEvents');
cambiar HTMLEvents a MouseEventsvar ev = document.createEvent('MouseEvents');
HTML:
JQUERY
Espero que esto funcione :)
fuente
Puede darle al elemento de entrada una opacidad de fuente de 0. Esto ocultará el campo de texto sin ocultar el botón 'Elegir archivos'.
No se requiere JavaScript, borre el navegador cruzado desde IE 9
P.ej,
fuente
Tengo una solución realmente hacky con esto ...
El problema es que el atributo de ancho que oculta el campo de texto variará obviamente entre los navegadores, variará entre los temas de Windows XP, etc. ¿Quizás es algo con lo que puedes trabajar? ...
fuente
Sé que esta es una publicación antigua, pero una forma simple de hacer que el texto desaparezca es simplemente establecer el color del texto en el fondo.
por ejemplo, si el fondo de entrada de texto es blanco, entonces:
Esto no afectará el texto Elegir archivo, que seguirá siendo negro debido al navegador.
fuente
Esto funciona para mi:
fuente
mi solución es simplemente configurarlo dentro de un div como dijo "druveen", sin embargo, agrego mi propio estilo de botón al div (hacer que parezca un botón con: hover) y simplemente configuro el estilo "opacidad: 0;" a la entrada. Me encanta, espero que haga lo mismo por ti.
fuente
Acabo de diseñar un archivo de entrada con ancho: 85 px, y el campo de texto desapareció
fuente
Este código HTML solo aparece en el botón Cargar archivo
fuente
fuente
Para mí, la forma más simple es usar un color de fuente como el color de fondo. Simple, no elegante, pero útil.
fuente
Así que aquí está la mejor manera de hacer esto PARA TODOS LOS NAVEGADORES:
¡Olvídate de CSS!
fuente
Todas estas respuestas son lindas, pero CSS no funcionará, ya que no es lo mismo en todos los navegadores y dispositivos, la primera respuesta que escribí funcionará en todo menos en Safari. Para que funcione en todos los navegadores todo el tiempo, debe crearse dinámicamente y recrearse cada vez que desee borrar el texto de entrada:
fuente
La respuesta de tmanthey es bastante buena, excepto que no puedes jugar con border-width en Firefox v20. Si ve el enlace (demo, realmente no se puede mostrar aquí) resolvieron el problema usando font-size = 23px, transform: translate (-300px, 0px) scale (4) para que Firefox agrande el botón.
Otras soluciones que usan .click () en un div diferente son inútiles si desea convertirlo en un cuadro de entrada de arrastrar y soltar.
fuente
Hay varias opciones válidas aquí, pero pensé que daría lo que se me ocurrió al tratar de solucionar un problema similar. http://jsfiddle.net/5RyrG/1/
fuente
Resuelto con el siguiente código:
<div style="overflow: hidden;width:83px;"> <input style='float:right;' name="userfile" id="userfile" type="file"/> </div>
fuente
Yo escribí esto:
Funciona bien en todos los navegadores, sin jQuery, sin CSS.
fuente
Aquí hay una versión simplificada de la solución popular de @ampersandre que funciona en todos los principales navegadores. Asp.NET marcado
Código JQuery
código css
Utiliza un activador de clics "UploadButton" oculto para la devolución de datos del servidor con estándar. El texto con "Subir archivo" deja el control de entrada fuera de la vista en el contenedor contenedor cuando se desborda, por lo que no es necesario aplicar ningún estilo para el control de "archivo de entrada". El selector $ ([id $ = "FileInput"]) permite la sección de identificadores con prefijos ASP.NET estándar aplicados. El valor del cuadro de texto FilePath se establece desde el código del servidor detrás de hdnFileName.Value una vez que se carga el archivo.
fuente