cara mengatur nilai kotak teks di jquery

107

Bagaimana cara memuat dengan benar nilai tertentu ke dalam kotak teks menggunakan jquery? Mencoba yang di bawah ini tetapi saya mendapatkan [object Object]sebagai output. Tolong jelaskan saya tentang ini, saya baru mengenal 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
sumber
apa itu str3? Dimana itu dideklarasikan? Tampaknya Anda mencoba memuat objek sebagai nilai ketika Anda mungkin hanya membutuhkan properti dari objek
itu-
maaf, lupa menyetel st3 = $ ('# subtotal'). load ('compz.php? prodid =' + x + '& qbuys =' + y);
Wern Ancheta

Jawaban:

170

Saya pikir Anda ingin menyetel respons panggilan ke URL 'compz.php?prodid=' + x + '&qbuys=' + ysebagai nilai kotak teks, bukan? Jika ya, Anda harus melakukan sesuatu seperti:

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

Referensi: get()

Ada dua kesalahan dalam kode Anda:

  • load()menempatkan HTML yang dikembalikan dari Ajax ke elemen yang ditentukan:

    Muat data dari server dan tempatkan HTML yang dikembalikan ke elemen yang cocok.

    Anda tidak dapat menyetel nilai kotak teks dengan metode itu.

  • $(selector).load()mengembalikan objek jQuery . Secara default, sebuah objek diubah menjadi [object Object]ketika diperlakukan sebagai string.

Klarifikasi lebih lanjut :

Dengan asumsi URL Anda kembali 5.

Jika HTML Anda terlihat seperti:

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

lalu hasil

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

akan

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

Tetapi dalam kode Anda, Anda memiliki elemen input. Secara teoritis (ini bukan HTML yang valid dan tidak berfungsi seperti yang Anda perhatikan), panggilan yang setara akan menghasilkan

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

Tapi sebenarnya Anda membutuhkannya

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

Oleh karena itu, Anda tidak dapat menggunakan load(). Anda harus menggunakan metode lain, dapatkan respons dan atur sendiri sebagai nilai.

Felix Kling
sumber
apakah benar-benar menjadi lebih sulit jika saya hanya ingin mengubah di mana hasil dimuat? Kode saya di atas berfungsi ketika saya memuatnya ke div.
Wern Ancheta
1
@Ieyasu Sawada: Nah, saat ini Anda meneruskan objek JavaScript ke $('#subtotal').val(str3);karena load()tidak berfungsi seperti yang Anda kira. Ya, Anda dapat menggunakan load()untuk memuat teks atau HTML ke dalam divtetapi tidak sebagai nilai kotak teks.
Felix Kling
@Ieyasu Sawada: Lihat pembaruan saya untuk klarifikasi lebih lanjut, semoga membantu!
Felix Kling
satu pertanyaan terakhir? Mengapa saya mendapatkan spasi sebelum hasil aktual pada output? Apakah mungkin untuk menghapusnya di jquery, pada dasarnya compz.php berisi banyak spasi putih untuk keterbacaan yang lebih baik dan spasi tersebut sebenarnya dikeluarkan bersama dengan hasilnya
Wern Ancheta
@Ieyasu Sawada: Anda dapat menggunakan fungsi JavaScript normal, misalnya dengan ekspresi reguler:data = data.replace(/\s+/, '');
Felix Kling
56

Perhatikan bahwa .valueatributnya adalah fitur JavaScript. Jika Anda ingin menggunakan jQuery, gunakan:

$('#pid').val()

untuk mendapatkan nilainya, dan:

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

untuk mengaturnya.

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

Mengenai masalah kedua Anda, saya belum pernah mencoba mengatur nilai HTML secara otomatis menggunakan loadmetode ini. Yang pasti, Anda bisa melakukan sesuatu seperti ini:

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

Perhatikan bahwa kode di atas belum teruji.

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

Mauro
sumber
2
Ada baiknya menunjukkan halaman jQuery api yang relevan val(), untuk tujuan referensi.
David mengatakan mengembalikan Monica
1
Bahkan jika terlalu mendasar untuk menunjukkannya, mungkin? Hanya pendapat saya yang sederhana ... Bagaimanapun diperbarui!
Mauro
compz.php menghitung produk dari 2 angka di input. Saya kira bagian yang memuat nilai yang dihitung: $ ('# subtotal'). Load ('compz.php? Prodid =' + x + '& qbuys =' + y); diperlakukan sebagai objek, itulah mengapa saya melihat objek objek sebagai output, lalu bagaimana cara mengubahnya menjadi nilai normal
Wern Ancheta
1
Tidak pernah terlalu mendasar , lihat pertanyaannya lagi. Jika dia telah melihat halaman tersebut, atau mengetahui isinya, dia mungkin tidak akan mengajukan pertanyaan =)
David mengatakan memulihkan Monica
1
Menunjukkan masalah sebenarnya akan menjadi titik awal yang baik Kedamaian dan Cinta;)
Mauro
5

Saya ingin menunjukkan kepada Anda bahwa .val () juga berfungsi dengan pemilihan untuk memilih nilai yang dipilih saat ini.

Oliver M Grech
sumber
0

mencoba

subtotal.value= 5 // some value

Kamil Kiełczewski
sumber