como definir o valor da caixa de texto em jquery

107

Como faço para carregar corretamente um determinado valor em uma caixa de texto usando jquery? Tentei o abaixo, mas recebo a [object Object]saída como. Por favor, esclareça-me sobre isso, eu sou novo no 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
fonte
o que é str3? Onde está declarado? Parece que você está tentando carregar um objeto como valor quando provavelmente só precisa de uma propriedade desse objeto-
Fgblanch
desculpe, esqueci de definir st3 = $ ('# subtotal'). load ('compz.php? prodid =' + x + '& qbuys =' + y);
Wern Ancheta

Respostas:

170

Acho que você quer definir a resposta da chamada para a URL 'compz.php?prodid=' + x + '&qbuys=' + ycomo valor da caixa de texto certo? Nesse caso, você deve fazer algo como:

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

Referência: get()

Você tem dois erros em seu código:

  • load()coloca o HTML retornado do Ajax no elemento especificado:

    Carregue os dados do servidor e coloque o HTML retornado no elemento correspondente.

    Você não pode definir o valor de uma caixa de texto com esse método.

  • $(selector).load()retorna o objeto a jQuery . Por padrão, um objeto é convertido em [object Object]quando tratado como string.

Esclarecimentos adicionais :

Supondo que seu URL retorne 5.

Se o seu HTML for semelhante a:

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

então o resultado de

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

será

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

Mas em seu código, você tem um elemento de entrada. Teoricamente (não é um HTML válido e não funciona como você percebeu), uma chamada equivalente resultaria em

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

Mas você realmente precisa

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

Portanto, você não pode usar load(). Você tem que usar outro método, obter a resposta e defini-la como valor você mesmo.

Felix Kling
fonte
fica realmente mais difícil se eu só quiser alterar o local onde o resultado está sendo carregado? Meu código acima é funcional quando eu o carrego em um div.
Wern Ancheta
1
@Ieyasu Sawada: Bem, atualmente você está passando um objeto JavaScript $('#subtotal').val(str3);porque load()não funciona como você pensava. Sim, você pode usar load()para carregar texto ou HTML em um valor, divmas não como caixa de texto.
Felix Kling de
@Ieyasu Sawada: Veja minha atualização para maiores esclarecimentos, espero que ajude!
Felix Kling de
uma última pergunta? Por que obtenho espaços antes do resultado real na saída? É possível removê-los no jquery, basicamente compz.php contém muitos espaços em branco para melhor legibilidade e esses espaços em branco estão realmente sendo exibidos junto com o resultado
Wern Ancheta
@Ieyasu Sawada: Você pode usar funções JavaScript normais, por exemplo, com expressão regular:data = data.replace(/\s+/, '');
Felix Kling
56

Observe que o .valueatributo é um recurso JavaScript. Se você quiser usar jQuery, use:

$('#pid').val()

para obter o valor e:

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

para defini-lo.

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

Em relação ao seu segundo problema, nunca tentei definir automaticamente o valor HTML usando o loadmétodo. Com certeza, você pode fazer algo assim:

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

Observe que o código acima não foi testado.

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

Mauro
fonte
2
Vale a pena apontar a página da API jQuery relevante val()para fins de referência.
David diz para restabelecer Monica em
1
Mesmo que seja muito básico para apontar isso, talvez? Apenas minha humilde opinião ... De qualquer forma atualizado!
Mauro
compz.php calcula o produto dos 2 números na entrada. Acho que a parte que carrega os valores calculados: $ ('# subtotal'). Load ('compz.php? Prodid =' + x + '& qbuys =' + y); está sendo tratado como objeto, é por isso que vejo objeto objeto como saída, como então faço para convertê-lo em um valor normal
Wern Ancheta
1
Nunca é muito básico , olhe para a pergunta novamente. Se ele tivesse visto a página, ou conhecido seu conteúdo, ele provavelmente não teria feito a pergunta =)
David diz reintegrar Monica em
1
Apontar o verdadeiro problema teria sido um bom ponto de partida Paz e Amor;)
Mauro
5

Gostaria de salientar que .val () também funciona com selects para selecionar o valor selecionado atualmente.

Oliver M Grech
fonte
0

experimentar

subtotal.value= 5 // some value

Kamil Kiełczewski
fonte