comment définir la valeur de la zone de texte dans jquery

107

Comment puis-je charger correctement une certaine valeur dans une zone de texte à l'aide de jquery? J'ai essayé celle ci-dessous mais j'obtiens la [object Object]sortie. Veuillez m'éclairer à ce sujet, je suis nouveau dans 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
la source
qu'est-ce que str3? Où est-il déclaré? Il semble que vous essayez de charger un objet en tant que valeur alors que vous avez probablement juste besoin d'une propriété de cet objet-
Fgblanch
désolé, j'ai oublié de définir st3 = $ ('# subtotal'). load ('compz.php? prodid =' + x + '& qbuys =' + y);
Wern Ancheta

Réponses:

170

Je pense que vous souhaitez définir la réponse de l'appel à l'URL 'compz.php?prodid=' + x + '&qbuys=' + ycomme valeur de la zone de texte, n'est-ce pas? Si c'est le cas, vous devez faire quelque chose comme:

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

Référence: get()

Vous avez deux erreurs dans votre code:

  • load()place le HTML renvoyé par Ajax dans l'élément spécifié:

    Chargez les données du serveur et placez le code HTML renvoyé dans l'élément correspondant.

    Vous ne pouvez pas définir la valeur d'une zone de texte avec cette méthode.

  • $(selector).load()renvoie un objet jQuery . Par défaut, un objet est converti en [object Object]lorsqu'il est traité comme une chaîne.

Précisions supplémentaires :

En supposant que votre URL retourne 5.

Si votre HTML ressemble à:

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

puis le résultat de

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

sera

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

Mais dans votre code, vous avez un élément d'entrée. Théoriquement (ce n'est pas du HTML valide et ne fonctionne pas comme vous l'avez remarqué), un appel équivalent entraînerait

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

Mais tu as vraiment besoin

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

Par conséquent, vous ne pouvez pas utiliser load(). Vous devez utiliser une autre méthode, obtenir la réponse et la définir vous-même comme valeur.

Félix Kling
la source
est-ce que cela devient vraiment plus difficile si je veux simplement changer l'endroit où le résultat est chargé? Mon code ci-dessus est fonctionnel lorsque je le charge dans un div.
Wern Ancheta
1
@Ieyasu Sawada: Eh bien, actuellement, vous passez un objet JavaScript à $('#subtotal').val(str3);parce que load()cela ne fonctionne pas comme vous le pensiez. Oui, vous pouvez utiliser load()pour charger du texte ou du HTML dans une divvaleur de zone de texte, mais pas en tant que valeur de zone de texte.
Felix Kling
@Ieyasu Sawada: Voir ma mise à jour pour plus de précisions, j'espère que cela aidera!
Felix Kling
une dernière question? Pourquoi ai-je des espaces avant le résultat réel sur la sortie? Est-il possible de les supprimer dans jquery, essentiellement compz.php contient beaucoup d'espaces blancs pour une meilleure lisibilité et ces espaces sont en fait affichés avec le résultat
Wern Ancheta
@Ieyasu Sawada: Vous pouvez utiliser des fonctions JavaScript normales, par exemple avec une expression réglementaire:data = data.replace(/\s+/, '');
Felix Kling
56

Notez que l' .valueattribut est une fonctionnalité JavaScript. Si vous souhaitez utiliser jQuery, utilisez:

$('#pid').val()

pour obtenir la valeur, et:

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

pour le régler.

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

En ce qui concerne votre deuxième problème, je n'ai jamais essayé de définir automatiquement la valeur HTML à l'aide de la loadméthode. Bien sûr, vous pouvez faire quelque chose comme ceci:

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

Notez que le code ci-dessus n'a pas été testé.

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

Mauro
la source
2
Il convient de signaler la page API jQuery pertinente pour val(), à des fins de référence.
David dit de réintégrer Monica
1
Même si c'est trop basique pour le souligner, peut-être? Juste mon humble avis ... De toute façon mis à jour!
Mauro
compz.php calcule le produit des 2 nombres dans l'entrée. Je suppose que la partie qui charge les valeurs calculées: $ ('# subtotal'). Load ('compz.php? Prodid =' + x + '& qbuys =' + y); est traité comme un objet, c'est pourquoi je vois l'objet objet en tant que sortie, comment puis-je le convertir en valeur normale
Wern Ancheta
1
Ce n'est jamais trop basique , revoyez la question. S'il avait vu la page, ou connu son contenu, il n'aurait probablement pas posé la question =)
David dit de réintégrer Monica
1
Souligner le vrai problème aurait été un bon point de départ Peace and Love;)
Mauro
5

Je voudrais vous signaler que .val () fonctionne également avec selects pour sélectionner la valeur actuellement sélectionnée.

Oliver M Grech
la source
0

essayer

subtotal.value= 5 // some value

Kamil Kiełczewski
la source