2009-02-26 11 views
8

¿Es posible evitar que un usuario escriba un cuadro de texto de entrada de archivo en IE? La razón por la que pregunto es que si un usuario ingresa texto que no se parece a una ruta del sistema de archivos (por ejemplo, no comienza con algo como c: ...) entonces cuando el usuario hace clic en el botón de enviar nada sucederá.Cómo deshabilitar el cuadro de texto de entrada de archivo en IE?

Me gustaría no permitir que el usuario escriba en el cuadro o enviar el formulario de forma normal.

he encontrado que la misma pregunta se hizo aquí sin respuesta: http://www.webmasterworld.com/html/3290988.htm

Y esta persona se le ocurrió un truco que puedo usar si no hay otra respuesta adecuada: http://www.shauninman.com/archive/2007/09/10/styling_file_inputs_with_css_and_the_dom

EDITAR: para aclarar: si el usuario escribe "no es una ruta de archivo" en el cuadro de texto junto al botón "Buscar" y hace clic en Enviar, en IE no sucederá nada. El formulario no se enviará: IE no permite que se envíe un formulario cuando un cuadro de entrada < type = "file" > no tiene una ruta de archivo real.

Respuesta

2

Lo resolví de otra manera usando un botón en lugar de enviar y usar JavaScript para verificar el valor antes de enviarlo.

<input type="file" name="inputFile"> 
<input type="button" onclick="if(fileHasValidPath()) { submitForm(); }" value="Submit"> 

function fileHasValidPath() { 
    if (isIE()) { 
    var inputFile = document.forms[0].inputFile; 
    if (inputFile.value != "" && /^(\w:)|(\\)/.test(inputFile.value)) { 
     alert("File is not a valid file. Please use the Browse button to select a file."); 
     inputFile.select(); 
     inputFile.focus(); 
     return false; 
    } 
    } 

    return true; 
} 

function submitForm() { 
    document.forms[0].submit(); 
} 

me di cuenta que todavía es necesario que haya validación del lado del servidor para el archivo, pero esto es sólo para prevenir un usuario haga clic en el botón Enviar y no ver todo lo que ocurre. Además, asume IE utilizando un sistema operativo Windows.

+0

También podría agregar el método de validación al evento onsubmit del formulario y usar un envío estándar. – Ishmael

+2

"Además, supone IE utilizando un sistema operativo Windows". -> No puedo contar el tiempo que he pasado maldiciendo sitios web que hacen estas suposiciones ... –

0

no podría usar

<input ... disabled> 

EDITAR: no, en realidad que impide la presentación, así ... pero en HTML 4 aparentemente

<input ... readonly> 

debería funcionar. http://htmlhelp.com/reference/html40/forms/input.html

+0

Esto inhabilita al usuario para que haga clic en el botón "Buscar" para seleccionar un archivo. Todavía quiero que puedan seleccionar un archivo. –

+0

oh ... bueno, no importa ;-) –

1

una forma es poner un pequeño código de javascript en los botones en el momento de la publicación. La idea es validar el cuadro y detener el envío o permitirlo.

Sin embargo, probablemente sea mejor que simplemente valide el lado del servidor de contenido del archivo y vuelva a mostrar el error correspondiente al cliente.

2

Esto puede ser una mala idea para empezar. ¿Qué ocurre si el usuario no está utilizando un sistema operativo Windows y desea cargar el archivo /home/user/example.txt?

Este tipo de control podría implementarse mejor en el lado del servidor.

+0

no en el servidor, debería estar en el navegador ... si el diseño HTML fuera más lógico, por supuesto. – Javier

+1

Los usuarios pueden manipular el HTML/Javascript y aún enviar archivos que no se ajusten a lo que verifica la página web. La única forma de garantizarlo es verificarlo desde el servidor. Un lado del cliente aún sería bueno para ahorrar tiempo a los usuarios que no manipulan y los recursos del servidor. –

7

¿Qué tal este? No puede escribir, o hacer clic derecho y pegar.

<input type="file" name="file" onKeyDown="this.blur()" onContextMenu="return false;"> 
+0

Me ayudó. gracias;) – Sandeep

+0

Simple y elegante. Trabajos. +1. –

1

el tipo de entrada = la propiedad del valor del elemento del archivo es solo de lectura por motivos de seguridad. Puede leer esta propiedad y hacer un control. Si no se corresponde con sus reglas, dará una advertencia y permitirá que la persona lo modifique. La otra manera de usar la propiedad outerHTML es anularla. por ejemplo: Elemento de archivo de entrada HTML llamado objInputFileElement. objInputFileElement.outerHTML = "";

0

Encontré la opción que resuelve su problema. Es la opción contentEditable de la siguiente manera:

<input type="file" name="name" contentEditable="false"/> 
0

Aquí es una demostración de la opción contentEditable:

<input type="file" name="name" contentEditable="false" /> 
0

basé mi solución en this thread.

Por lo tanto, teniendo en cuenta este campo archivo:

<input type="file" id="file_field"> 

lo tengo para trabajar con algo como esto en jQuery:

$(document).ready(function() { 
    $('#file_field').bind("keydown", function(e) { 
     e.preventDefault(); 
    }); 
}); 

NOTA: Debe utilizar keydown vez de tecla de presion como cubre DEL y RETROCESO, así como cualquier tecla de impresión.

Cuestiones relacionadas