cómo establecer el valor del cuadro de texto en jquery

107

¿Cómo cargo correctamente un cierto valor en un cuadro de texto usando jquery? Probé el siguiente, pero obtengo el [object Object]resultado. Por favor, infórmeme sobre esto, soy nuevo en jquery.

proc = function(x, y) {
  var str1 = $('#pid').value;
  var str2 = $('#qtytobuy').value;
  var str3 = $('#subtotal').load('compz.php?prodid=' + x + '&qbuys=' + y);
  $('#subtotal').val(str3);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>


<form name="yoh" method="get">
  Product id: <input type="text" name="pid" value=""><br/> 
  Quantity to buy:<input type="text" name="qtytobuy" value="" onkeyup="proc(document.yoh.pid.value, this.value);"></br>

  Subtotal:<input type="text" name="subtotal" id="subtotal" value=""></br>
  <div id="compz"></div>

</form>

Wern Ancheta
fuente
que es str3? ¿Dónde se declara? Parece que está intentando cargar un objeto como valor cuando probablemente solo necesite una propiedad de ese objeto-
Fgblanch
lo siento, olvidé establecer st3 = $ ('# subtotal'). load ('compz.php? prodid =' + x + '& qbuys =' + y);
Wern Ancheta

Respuestas:

170

Creo que desea establecer la respuesta de la llamada a la URL 'compz.php?prodid=' + x + '&qbuys=' + ycomo valor del cuadro de texto, ¿verdad? Si es así, tienes que hacer algo como:

$.get('compz.php?prodid=' + x + '&qbuys=' + y, function(data) {
    $('#subtotal').val(data);
});

Referencia: get()

Tienes dos errores en tu código:

  • load()coloca el HTML devuelto por Ajax en el elemento especificado:

    Cargue datos del servidor y coloque el HTML devuelto en el elemento coincidente.

    No puede establecer el valor de un cuadro de texto con ese método.

  • $(selector).load()devuelve el objeto a jQuery . De forma predeterminada, un objeto se convierte en [object Object]cuando se trata como una cadena.

Aclaración adicional :

Suponiendo que su URL regrese 5.

Si su HTML se parece a:

<div id="foo"></div>

entonces el resultado de

$('#foo').load('/your/url');

estarán

<div id="foo">5</div>

Pero en su código, tiene un elemento de entrada. Teóricamente (no es HTML válido y no funciona como notó), una llamada equivalente daría como resultado

<input id="foo">5</input>

Pero realmente necesitas

<input id="foo" value="5" />

Por lo tanto, no puede usar load(). Tienes que usar otro método, obtener la respuesta y establecerla como valor tú mismo.

Felix Kling
fuente
¿Realmente se vuelve más difícil si solo quiero cambiar dónde se carga el resultado? Mi código anterior es funcional cuando lo cargo en un div.
Wern Ancheta
1
@Ieyasu Sawada: Bueno, actualmente le está pasando un objeto JavaScript a $('#subtotal').val(str3);porque load()no funciona como pensaba. Sí, puede utilizar load()para cargar texto o HTML en un divvalor de cuadro de texto pero no como.
Felix Kling
@Ieyasu Sawada: Vea mi actualización para más aclaraciones, ¡espero que ayude!
Felix Kling
una última pregunta? ¿Por qué obtengo espacios antes del resultado real en la salida? ¿Es posible eliminarlos en jquery, básicamente compz.php contiene muchos espacios en blanco para una mejor legibilidad y esos espacios en blanco en realidad se generan junto con el resultado?
Wern Ancheta
@Ieyasu Sawada: Puede usar funciones normales de JavaScript, por ejemplo, con expresión regular:data = data.replace(/\s+/, '');
Felix Kling
56

Tenga en cuenta que el .valueatributo es una función de JavaScript. Si desea usar jQuery, use:

$('#pid').val()

para obtener el valor y:

$('#pid').val('value')

para configurarlo.

http://api.jquery.com/val/

Con respecto a su segundo problema, nunca he intentado configurar automáticamente el valor HTML con el loadmétodo. Seguro que puedes hacer algo como esto:

$('#subtotal').load( 'compz.php?prodid=' + x + '&qbuys=' + y, function(response){ $('#subtotal').val(response);
});

Tenga en cuenta que el código anterior no está probado.

http://api.jquery.com/load/

Mauro
fuente
2
Vale la pena señalar la página de la API de jQuery relevante val()para fines de referencia.
David dice reinstalar a Monica
1
Incluso si es demasiado básico para señalarlo, ¿quizás? Solo mi humilde opinión ... ¡De todos modos actualizado!
Mauro
compz.php calcula el producto de los 2 números en la entrada. Supongo que la parte que carga los valores calculados: $ ('# subtotal'). Load ('compz.php? Prodid =' + x + '& qbuys =' + y); está siendo tratado como un objeto, por eso veo el objeto objeto como una salida, ¿cómo puedo convertirlo a un valor normal?
Wern Ancheta
1
Nunca es demasiado básico , mira la pregunta de nuevo. Si hubiera visto la página, o conocido su contenido, probablemente no habría hecho la pregunta =)
David dice reinstalar a Monica el
1
Señalar el problema real hubiera sido un buen punto de partida Paz y amor;)
Mauro
5

Me gustaría señalarle que .val () también funciona con selecciones para seleccionar el valor seleccionado actual.

Oliver M. Grech
fuente
0

tratar

subtotal.value= 5 // some value

Kamil Kiełczewski
fuente