So legen Sie den Textfeldwert in jquery fest

107

Wie lade ich einen bestimmten Wert mit jquery richtig in ein Textfeld? Versuchte den folgenden, aber ich erhalte die [object Object]Ausgabe als. Bitte klären Sie mich darüber auf, ich bin neu in 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
quelle
Was ist Str3? Wo ist es deklariert? Es scheint, dass Sie versuchen, ein Objekt als Wert zu laden, wenn Sie wahrscheinlich nur eine Eigenschaft von diesem Objekt benötigen
Fgblanch
Entschuldigung, ich habe vergessen, st3 = $ ('# subtotal') zu setzen. load ('compz.php? prodid =' + x + '& qbuys =' + y);
Wern Ancheta

Antworten:

170

Ich denke, Sie möchten die Antwort des Anrufs auf die URL 'compz.php?prodid=' + x + '&qbuys=' + yals Wert des Textfelds festlegen, oder? Wenn ja, müssen Sie Folgendes tun:

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

Referenz: get()

Sie haben zwei Fehler in Ihrem Code:

  • load()fügt den vom Ajax zurückgegebenen HTML- Code in das angegebene Element ein:

    Laden Sie Daten vom Server und platzieren Sie den zurückgegebenen HTML-Code in dem übereinstimmenden Element.

    Mit dieser Methode können Sie den Wert eines Textfelds nicht festlegen.

  • $(selector).load()Gibt das a jQuery- Objekt zurück . Standardmäßig wird ein Objekt konvertiert, [object Object]wenn es als Zeichenfolge behandelt wird.

Weitere Klarstellung :

Angenommen, Ihre URL kehrt zurück 5.

Wenn Ihr HTML so aussieht:

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

dann das Ergebnis von

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

wird sein

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

Aber in Ihrem Code haben Sie ein Eingabeelement. Theoretisch (es ist kein gültiges HTML und funktioniert nicht wie Sie bemerkt haben) würde ein gleichwertiger Aufruf dazu führen

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

Aber du brauchst es tatsächlich

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

Daher können Sie nicht verwenden load(). Sie müssen eine andere Methode verwenden, die Antwort abrufen und selbst als Wert festlegen.

Felix Kling
quelle
Wird es wirklich schwieriger, wenn ich nur ändern möchte, wo das Ergebnis geladen wird? Mein Code oben ist funktionsfähig, wenn ich ihn in ein div lade.
Wern Ancheta
1
@ Ieyasu Sawada: Nun, derzeit übergeben Sie ein JavaScript-Objekt an, $('#subtotal').val(str3);weil load()es nicht so funktioniert, wie Sie es sich vorgestellt haben. Ja, Sie können load()Text oder HTML in einen divTextfeldwert laden, jedoch nicht als Textfeldwert.
Felix Kling
@ Ieyasu Sawada: Siehe mein Update für weitere Erläuterungen, hoffe es hilft!
Felix Kling
eine letzte Frage: Warum bekomme ich Leerzeichen vor dem eigentlichen Ergebnis in der Ausgabe? Ist es möglich, sie in jquery zu entfernen? Im Grunde enthält compz.php viele Leerzeichen für eine bessere Lesbarkeit und diese Leerzeichen werden tatsächlich zusammen mit dem Ergebnis ausgegeben
Wern Ancheta
@ Ieyasu Sawada: Sie können normale JavaScript-Funktionen verwenden, z. B. mit regulärem Ausdruck:data = data.replace(/\s+/, '');
Felix Kling
56

Beachten Sie, dass das .valueAttribut eine JavaScript-Funktion ist. Wenn Sie jQuery verwenden möchten, verwenden Sie:

$('#pid').val()

um den Wert zu erhalten, und:

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

um es einzustellen.

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

In Bezug auf Ihr zweites Problem habe ich nie versucht, den HTML-Wert mithilfe der loadMethode automatisch festzulegen . Natürlich können Sie so etwas tun:

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

Beachten Sie, dass der obige Code nicht getestet wurde.

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

Mauro
quelle
2
Es lohnt sich , zu Referenzzwecken auf die entsprechende jQuery-API- Seite hinzuweisen val().
David sagt, Monica
1
Auch wenn es vielleicht viel zu grundlegend ist, um darauf hinzuweisen? Nur meine bescheidene Meinung ... Jedenfalls aktualisiert!
Mauro
compz.php berechnet das Produkt der 2 Zahlen in der Eingabe. Ich denke, der Teil, der die berechneten Werte lädt: $ ('# subtotal'). Load ('compz.php? Prodid =' + x + '& qbuys =' + y); wird als Objekt behandelt, deshalb sehe ich Objektobjekt als Ausgabe, wie konvertiere ich es dann in einen normalen Wert
Wern Ancheta
1
Es ist nie zu einfach , schauen Sie sich die Frage noch einmal an. Wenn er die Seite gesehen hätte oder ihren Inhalt gekannt hätte, hätte er die Frage wahrscheinlich nicht gestellt =)
David sagt, Monica
1
Auf das eigentliche Problem hinzuweisen wäre ein guter Ausgangspunkt für Frieden und Liebe gewesen;)
Mauro
5

Ich möchte Sie darauf hinweisen, dass .val () auch mit selects zusammenarbeitet, um den aktuell ausgewählten Wert auszuwählen.

Oliver M Grech
quelle
0

Versuchen

subtotal.value= 5 // some value

Kamil Kiełczewski
quelle