jak ustawić wartość pola tekstowego w jquery

107

Jak poprawnie załadować określoną wartość do pola tekstowego za pomocą jquery? Wypróbowałem poniższy, ale otrzymuję [object Object]jako dane wyjściowe. Proszę mnie oświecić, jestem nowy w 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
źródło
co to jest str3? Gdzie jest to zadeklarowane? Wygląda na to, że próbujesz załadować obiekt jako wartość, kiedy prawdopodobnie potrzebujesz tylko właściwości z tego
obiektu-
przepraszam, zapomniałem ustawić st3 = $ ('# subtotal'). load ('compz.php? prodid =' + x + '& qbuys =' + y);
Wern Ancheta

Odpowiedzi:

170

Myślę, że chcesz ustawić odpowiedź na wywołanie adresu URL 'compz.php?prodid=' + x + '&qbuys=' + yjako wartość pola tekstowego, prawda? Jeśli tak, musisz zrobić coś takiego:

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

Odniesienie: get()

Masz dwa błędy w kodzie:

  • load()umieszcza kod HTML zwrócony z Ajax do określonego elementu:

    Załaduj dane z serwera i umieść zwrócony kod HTML w dopasowanym elemencie.

    Nie możesz ustawić wartości pola tekstowego tą metodą.

  • $(selector).load()zwraca obiekt jQuery . Domyślnie obiekt jest konwertowany na obiekt [object Object]traktowany jako ciąg.

Dalsze wyjaśnienie :

Zakładając, że Twój URL powróci 5.

Jeśli Twój kod HTML wygląda tak:

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

to wynik

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

będzie

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

Ale w swoim kodzie masz element wejściowy. Teoretycznie (nie jest to poprawny HTML i nie działa tak, jak zauważyłeś), równoważne wywołanie spowodowałoby

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

Ale naprawdę potrzebujesz

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

Dlatego nie możesz użyć load(). Musisz użyć innej metody, uzyskać odpowiedź i samodzielnie ustawić ją jako wartość.

Felix Kling
źródło
czy naprawdę staje się trudniejsze, jeśli chcę tylko zmienić miejsce wczytywania wyniku? Mój kod powyżej działa, gdy ładuję go do div.
Wern Ancheta
1
@Ieyasu Sawada: Cóż, obecnie przekazujesz obiekt JavaScript do, $('#subtotal').val(str3);ponieważ load()nie działa tak, jak myślałeś, że działa. Tak, możesz użyć load()do załadowania tekstu lub kodu HTML do divwartości pola tekstowego, ale nie jako wartości pola tekstowego.
Felix Kling
@Ieyasu Sawada: Zobacz moją aktualizację, aby uzyskać dalsze wyjaśnienia, mam nadzieję, że pomoże!
Felix Kling
ostatnie pytanie? Dlaczego na wyjściu otrzymuję spacje przed rzeczywistym wynikiem? Czy można je usunąć w jquery, w zasadzie compz.php zawiera wiele białych znaków dla lepszej czytelności, a te białe spacje są w rzeczywistości wypisywane razem z wynikiem
Wern Ancheta
@Ieyasu Sawada: Możesz używać normalnych funkcji JavaScript, np. Z wyrażeniem reglularnym:data = data.replace(/\s+/, '');
Felix Kling
56

Zwróć uwagę, że .valueatrybut jest funkcją JavaScript. Jeśli chcesz używać jQuery, użyj:

$('#pid').val()

aby uzyskać wartość i:

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

ustawić to.

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

Jeśli chodzi o twój drugi problem, nigdy nie próbowałem automatycznie ustawiać wartości HTML za pomocą tej loadmetody. Na pewno możesz zrobić coś takiego:

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

Zauważ, że powyższy kod jest nieprzetestowany.

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

Mauro
źródło
2
W celach informacyjnych warto wskazać odpowiednią stronę api jQueryval() .
David mówi, że przywróć Monikę
1
Nawet jeśli jest zbyt prosty, by to wskazać, może? Tylko moja skromna opinia ... W każdym razie zaktualizowana!
Mauro
compz.php oblicza iloczyn 2 liczb na wejściu. Chyba część, która ładuje obliczone wartości: $ ('# subtotal'). Load ('compz.php? Prodid =' + x + '& qbuys =' + y); jest traktowany jako obiekt, dlatego widzę obiekt obiekt jako wynik, jak następnie przekonwertować go na wartość normalną
Wern Ancheta
1
To nigdy nie jest zbyt proste , spójrz ponownie na pytanie. Gdyby zobaczył stronę lub znał jej zawartość, prawdopodobnie nie zadałby pytania =)
David mówi, że przywróć Monikę
1
Wskazanie prawdziwego problemu byłoby dobrym punktem wyjścia do pokoju i miłości;)
Mauro
5

Chciałbym zwrócić uwagę na to, że .val () działa również z zaznaczeniami, aby wybrać aktualnie wybraną wartość.

Oliver M. Grech
źródło
0

próbować

subtotal.value= 5 // some value

Kamil Kiełczewski
źródło