come impostare il valore della casella di testo in jquery


107

Come faccio a caricare correttamente un determinato valore in una casella di testo usando jquery? Ho provato quello qui sotto ma ottengo l' [object Object]output come. Per favore, illuminami su questo, sono nuovo a 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>


cos'è str3? Dove viene dichiarato? Sembra che tu stia cercando di caricare un oggetto come valore quando probabilmente hai solo bisogno di una proprietà da
quell'oggetto-

scusa, ho dimenticato di impostare st3 = $ ('# subtotale'). load ('compz.php? prodid =' + x + '& qbuys =' + y);
Wern Ancheta,

Risposte:


170

Penso che tu voglia impostare la risposta della chiamata all'URL 'compz.php?prodid=' + x + '&qbuys=' + ycome valore della casella di testo, giusto? Se è così, devi fare qualcosa come:

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

Riferimento: get()

Hai due errori nel codice:

  • load()inserisce l' HTML restituito dall'Ajax nell'elemento specificato:

    Carica i dati dal server e posiziona l'HTML restituito nell'elemento corrispondente.

    Non è possibile impostare il valore di una casella di testo con quel metodo.

  • $(selector).load()restituisce l' oggetto a jQuery . Per impostazione predefinita, un oggetto viene convertito [object Object]quando viene trattato come stringa.

Ulteriori chiarimenti :

Supponendo che il tuo URL ritorni 5.

Se il tuo HTML ha questo aspetto:

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

quindi il risultato di

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

sarà

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

Ma nel tuo codice hai un elemento di input. Teoricamente (non è HTML valido e non funziona come hai notato), una chiamata equivalente risulterebbe in

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

Ma in realtà ne hai bisogno

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

Pertanto, non puoi usare load(). Devi usare un altro metodo, ottenere la risposta e impostarla come valore tu stesso.


diventa davvero più difficile se voglio solo cambiare la posizione in cui viene caricato il risultato? Il mio codice sopra è funzionale quando lo carico in un div.
Wern Ancheta,

1
@ Ieyasu Sawada: Beh, attualmente stai passando un oggetto JavaScript $('#subtotal').val(str3);perché load()non funziona come pensavi che funzioni. Sì, puoi utilizzare load()per caricare testo o HTML in un divvalore di casella di testo ma non come.
Felix Kling

@ Ieyasu Sawada: vedi il mio aggiornamento per ulteriori chiarimenti, spero che aiuti!
Felix Kling

un'ultima domanda? Perché ottengo spazi prima del risultato effettivo sull'output? È possibile rimuoverli in jquery, fondamentalmente compz.php contiene molti spazi bianchi per una migliore leggibilità e quegli spazi bianchi vengono effettivamente emessi insieme al risultato
Wern Ancheta

@ Ieyasu Sawada: puoi usare le normali funzioni JavaScript, ad esempio con espressioni regolari:data = data.replace(/\s+/, '');
Felix Kling

56

Nota che l' .valueattributo è una funzionalità JavaScript. Se vuoi usare jQuery, usa:

$('#pid').val()

per ottenere il valore e:

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

per impostarlo.

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

Per quanto riguarda il tuo secondo problema, non ho mai provato a impostare automaticamente il valore HTML utilizzando il loadmetodo. Di sicuro, puoi fare qualcosa del genere:

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

Nota che il codice sopra non è stato testato.

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


2
Vale la pena sottolineare la pagina API jQuery pertinente per val(), a scopo di riferimento.
David dice di reintegrare Monica il

1
Anche se è troppo semplice per farlo notare, forse? Solo il mio modesto parere ... Comunque aggiornato!
Mauro

compz.php calcola il prodotto dei 2 numeri nell'input. Immagino la parte che carica i valori calcolati: $ ('# subtotale'). Load ('compz.php? Prodid =' + x + '& qbuys =' + y); viene trattato come un oggetto ecco perché vedo l'oggetto oggetto come output, come posso convertirlo in un valore normale
Wern Ancheta

1
Non è mai troppo semplice , guarda di nuovo la domanda. Se avesse visto la pagina, o conosciuto il suo contenuto, probabilmente non avrebbe fatto la domanda =)
David dice reintegrare Monica il

1
Segnalare il vero problema sarebbe stato un buon punto di partenza Peace and Love;)
Mauro

5

Vorrei farti notare che .val () funziona anche con selects per selezionare il valore attualmente selezionato.


0

provare

subtotal.value= 5 // some value

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.