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>


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ść.


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/


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ść.


0

próbować

subtotal.value= 5 // some value

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.