2010-01-29 22 views
9

Usando el siguiente códigoAjuste del valor de un cuadro de texto creado dinámicamente con jQuery

var newDiv = $(document.createElement("div")); 
var newTextBox; 

newTextBox = $(document.createElement("input")) 
    .attr("type", "text") 
    .attr("id", "textbox") 
    .attr("name", "textbox"); 

newTextBox.val("text"); 
newDiv.append(newTextBox); 
alert(newDiv.html()); 

me sale el siguiente

<input name="textbox" id="textbox" type="text"> 

tengo la misma cosa con

$("#textbox").val("test"); 

Uso

newTextBox = $("<input/>"); 

No ayuda tampoco

¿Dónde está mi valor?

EDIT: SOLTUION

Así, más arriba en la pila estaba convirtiendo el DOM I construido en una cadena y dado que - como se ha mencionado Munch - el valor dinámico no se han agregado a la etiqueta, se no estaba apareciendo.

Gracias por la ayuda

+0

¿Qué tal encadenamiento '.attr ('valor', 'texto') 'en la declaración? El último problema no funciona antes de haber inyectado el objeto en el DOM. –

+0

He intentado varias cosas para que esto funcione, curiosamente, no es así. Ni las sugerencias de @ nikc ni @TiuTalk hacen la diferencia. Estoy intrigado. – karim79

+0

Es interesante porque si hago una alerta (newTextBox.val()); muestra el valor correcto antes y después de inyectarlo en el div – Mason

Respuesta

9

jQuery no van a poner el valor en el elemento creado de HTML generado. Ambos .attr('value', 'blah') y .val() obtienen el valor actual de lo que se ha ingresado o modificado en la entrada de texto, y le permiten ver ese valor cuando mira la entrada en la página o la envía al servidor. Sin embargo, no lo verá cuando vea el html.

todavía se puede manipular el valor de todo lo que quieren, que simplemente no hay cambios en Firebug, como se hace con los cambios de clase, estilo, etc.

yo sepa, esta es la misma sin necesidad de utilizar jQuery. Lo mismo sucede con:

document.getElementById('textbox').value = 'my text'; 

El atributo de valor solo sirve para establecer el valor de algo del servidor. No es necesario con javascript.

Además, depende del tipo de entrada que esté utilizando. Por ejemplo, verá que el atributo de valor cambia con una entrada oculta, pero no con el cuadro de texto.

EDIT:

Añadiendo newDiv al cuerpo, el cuadro de texto y el valor aparecen utilizando su código. Here's a test page. Puede ver el código y la vista previa de lo que sucede. La alerta, sin embargo, no muestra ningún atributo de "valor" por las razones explicadas anteriormente.

+0

Entonces, ¿es imposible crear dinámicamente un cuadro de texto y establecer el valor en él y hacer que se muestre al usuario (a través del DOM, obviamente la concatenación de cadenas funcionaría)? – Mason

+0

El valor siempre se mostrará al usuario que mira el cuadro de texto. No verá el valor al mirar el html. La razón por la que no ve ningún resultado generado es porque no está agregando nuevaDiv a un elemento actualmente en la página, es decir. 'cuerpo') ... ver la revisión de mi respuesta – munch

+0

http://jsbin.com/ayoca/3 - esto funciona, ¿sí? – JonathanK

1
var newDiv = $(document.createElement("div")); 

var newTextBox = $('<input />') 
    .attr("type", "text") 
    .attr("id", "textbox") 
    .attr("name", "textbox") 
    .val("my text"); // <-- You can use here... 

newTextBox.val("my text"); // <-- or here 
newDiv.append(newTextBox); 
alert(newDiv.html()); 
+0

No ... aún no se ve el valor establecido – Mason

+0

Pruebe: alerta ($ ("# cuadro de texto"). Html()); –

+0

Eso me da el valor correcto, pero no es muy útil ya que estoy tratando de inyectar esto en el DOM. He destilado mi uso real en el ejemplo más simple posible. Editar: sería $ ("# textbox"). Val()) ya que es una entrada pero entiendo lo que quieres decir. – Mason

0

Con un pequeño truco que puede hacerlo ..

var newDiv = $('<div/>'); 
var newTextBox; 

newTextBox = $('<input/>') 
    .attr("type", "hidden") 
    .attr("id", "textbox") 
    .attr("name", "textbox"); 

newTextBox.val("text"); 
newDiv.append(newTextBox); 
newTextBox.each(function(){this.type='text';}); 
alert(newDiv.html()); 

primero definir su tipo que oculta, ya que esto permitirá que el atributo de valor y, a continuación, utilizando el cambio de código a texto ..

1
$("#element")[0].setAttribute("value","newvalue"); 
0

también se puede hacer esto

var chip = document.createElement("div"); chip.innerHTML="some value here" card.appendChild(chip)

Cuestiones relacionadas