2010-01-21 19 views
34

Tengo un campo de entrada sencilla dentro de una etiqueta de formulario:No se puede establecer el valor del campo de entrada oculto usando jQuery

<body> 
    <form action="#"> 
     <label>Input</label> 
     <input type="hidden" id="foo" name="foo" /> 

    </form> 
</body> 

traté de establecer este valor a partir de un archivo JS:

$(document).ready(function(){ 
    $('#foo').val('foo') 
}) 

pero en la fuente html, el atributo no está configurado en absoluto. Si trato de configurar el tipo de entrada para "botón" o cualquier otra cosa, funciona. Simplemente no puedo hacerlo con un campo de entrada hidden. ¿Qué estoy haciendo mal?

+5

La respuesta aceptada no responde a la pregunta real, a pesar de ser útil para llegar a una solución. Probablemente sea mejor aceptar una respuesta realmente correcta ya que esta pregunta obtiene 10k + visitas por año. –

+0

¿Te ayudaría si le das al campo de entrada un valor inicial? (incluso si es una cadena vacía) –

Respuesta

25

¿Se puede recuperar el valor de la campo oculto si configura la etiqueta val?

p. Ej.

<input type="hidden" id="foo" name="foo" value="bar" /> 

$(document).ready(function(){ 
    alert($('#foo').val()); 
}) 
+16

Solo para aclarar: el autor intentaba ver el valor modificado usando "Ver código fuente". Los cambios de nota realizados a DOM dinámicamente no son visibles a través de "Ver código fuente". – jjmontes

+0

hay algo raro cuando necesitas clonar la entrada oculta http://jsfiddle.net/YvBfP/ – max4ever

1

que había necesidad de ver todo el archivo, pero mi conjetura es o no está incluyendo el archivo de origen jquery.js o si tiene múltiples elementos con un diámetro interior de foo

+0

héhé ... Tenía dos identificaciones idénticas en dos formas, y su respuesta me hizo pensar en verificar esto ... ¡gracias! – citraL

24

I lo solucionaron. El valor fue establecido por jQuery, pero cuando lo visualicé, el nuevo valor no se mostró. Intenté esto (gracias a Fermin):

$('#foo').val('poo') 
alert($('#foo').val()) 

y mostró el valor modificado.

+1

Recomiendo usar una herramienta de desarrollo como firebug para que Firefox vea el código fuente dinámico más fácilmente. – David

+1

Si Fermin respondió su pregunta, debe marcarla como la respuesta aceptada. – rfunduk

+0

El complemento de desarrollador web de Firefox también tiene una herramienta 'Ver fuente generada' que mostrará la fuente con todos los cambios de JavaScript aplicados. –

3

También he estado luchando con esto. Si establece un valor inicial, digamos '0', y luego mira el DOM usando algo como Firebug, notará que el DOM se actualiza. Por alguna razón, si el valor inicial se establece en nulo o en una cadena vacía, el DOM no se actualiza, pero el valor aún se almacena.

Usted puede probar esta alertando al val después de haber establecido que (como se sugiere en los mensajes anteriores)

1

que tenía el mismo problema con un campo de entrada oculto. Id configuré el valor inicial en 0, funciona bien, pero a veces no quería tener un valor inicial de 0. Así que probé con value = "", un espacio en blanco, y también me funciona. Si completa la dinámica del valor desde PHP, puede hacer value="<?= $val+0; ?>" si 0 está bien para usted, o value="<?= $val; ?> " si un espacio en blanco está bien.

+0

puede confirmar. Al inicializar el campo de entrada oculto con "", tengo problemas para actualizarlo y modificarlo con jQuery. Al inicializarlo con 0 funcionó para mí. –

2

Tuve este problema cuando POST -ing mi formulario y mi script PHP no pudo obtener POST -ed valor. Utilicé esto:

$('#elemId').attr("name", theValue); 

Espero que ayude.

22

La mejor respuesta que encontré fue en el formulario http://forum.jquery.com/topic/passing-value-to-hidden-form-field.

En lugar de $('#Data').val(data); Cuando el ID de campo oculto es 'Datos'

Uso $('input[name=Data]').val(data);

funciona perfectamente para mí

+3

funciona porque los "datos" aquí son el "nombre" de la entrada, no del id. De todos modos, un voto positivo de mí porque también lo olvidé. –

0

Ninguna de las soluciones anteriores funcionó para mí.

que tenía que hacer lo siguiente para que funcione:

$('#foo').val(data).blur(); 
0

En lugar de inicializar el atributo de valor con una cadena inicializar su entrada como esta.

<input type="hidden" name="foo" id="foo" value="${foo}"> 

"foo" contendrá el nuevo valor que usted configuró también.

1

sé que es, pero todavía a que esto podría ayudar a alguien tarde .... Si ninguna de las soluciones anteriores trabajos, acaba de hacer esto ...

$(document).ready(function() { 
$('#foo').attr("value","foo") }); 
Cuestiones relacionadas