2010-02-08 34 views
7

Vine a ver que el valor del campo de entrada del archivo de formulario no se puede establecer con javascript por razones de seguridad.HTML: ¿Copia los campos del formulario a otro formulario, incluido el campo de entrada ARCHIVO?

Solo quiero copiar una entrada de ARCHIVO a otra forma y publicarla, busqué una solución y no pude encontrar nada, ¿es posible?

ACTUALIZACIÓN: mi código:

function prepareUpload(filevalue){ 

document.getElementById('logo').value =filevalue; 
var mform = document.getElementById('sleeker'); 
    ajaxUpload(mform,'<?php echo base_url(); ?>'); // a methods to upload... 
} 

<input class="input-file-upload" type="file" size="20" name="logodummy" id="logodummy" onchange="prepareUpload(this.value);" /> 

<form action="" method="post" name="sleeker" id="sleeker" enctype="multipart/form-data" onbeforesubmit="return false;"> 
      <p><input type="hidden" name="logo" id="logo" /></p> 
     </form> 

Cualquier otra entrada de archivo thatn están trabajando bien, y podría recibir con $ _POST, $ _FILES pero no tiene valores. Y este código solo funciona bien también. Creo que este coe es suficiente?

Respuesta

6

Sí, se puede colocar el <input type="file"> fuera de su formulario HTML, y luego utiliza el evento onChange para llenar un <input type="hidden"> dentro de la forma que consigue colocado:

<input type="file" 
     onchange="document.getElementById('hidden_file').value = this.value;" /> 

<form method="POST"> 
    <input type="hidden" id="hidden_file" value="" /> 
    <input type="submit" /> 
</form> 

Sin embargo en los navegadores modernos, sólo se podrá para acceder al nombre del archivo, y no a la ruta completa. Es posible que desee comprobar los siguientes mensajes desbordamiento de pila para obtener más información sobre este tema:


ACTUALIZACIÓN:

La pregunta original me hizo piense que solo necesita copiar el "nombre de archivo" a otro formulario HTML, y no el wh ole <input type="file"> representación.

Además de la actualización, supongo que quería decir algo como esto:

<input type="file" 
     onchange="document.getElementById('hidden_file').value = this.value;" /> 

<form method="POST"> 
    <input type="file" id="hidden_file" value="" /> 
    <input type="submit" /> 
</form> 

Desafortunadamente lo anterior no funciona. Firefox devolverá "Security error code: 1000" si prueba el ejemplo anterior.

En cuanto a algunas soluciones, es posible que desee sugerencias el cheque David Dorward 's:

+0

Gracias Daniel, esa es una idea brillante. Ahora el problema es que ninguno de los valores está disponible en el lado del servidor, eso es la matriz cargada está vacía (nombre, tamaño, tmp_name, etc. no tiene valores con FireFox 3.1). ¿Por qué? - Apache httpd server con PHP. – pMan

+0

@pMan: ¿Sería posible actualizar su pregunta con un pequeño fragmento de HTML y PHP? ? –

+0

Ver las actualizaciones – pMan

5

Usted puede mover el archivo de entrada a la otra forma (con appendChild o insertAntes), envíe el formulario y luego vuelva a moverlo.

4

No he probado esto en profundidad, pero parece funcionar en Firefox.

Uso cloneNode

var copy = file_input.cloneNode(1); 
form2.appendChild(copy); 
+0

Esto no funciona en Chrome 31 – hectorct

0

muy similar a cloneNode excepto en jQuery

En un navegador xulrunner (Firefox), he utilizado con éxito algo como lo siguiente:

$('input:file').clone().appendTo($('#mainform')); 

Este debe copiar todos los objetos de entrada de archivos en el formulario con id = mainform.

Evite utilizar el atributo id en los objetos que se clonarán. Los identificadores siempre deben ser únicos.

+1

Esto no funciona en Chrome 31. El valor de la nueva entrada está vacío. – hectorct

0

me di cuenta de que esto podría ser tarde a la fiesta, pero con HTML5, puede utilizar el atributo "forma" para llegar a un formulario, como [form id = "the_form"] ... [/ formulario]. ... [input form = "the_form type =" file "... /]

+0

¿Puedes cambiar jsFiddle? No entiendo tu respuesta :-( – user2783091

Cuestiones relacionadas