Як встановити значення текстового поля в jquery


107

Як я правильно завантажую певне значення в текстове поле за допомогою jquery? Спробував це нижче, але я отримав [object Object]як вихід. Будь ласка, просвітліть мене з цього приводу, я новачок у 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>


що str3? Де це задекларовано? Здається, що ви намагаєтеся завантажити об'єкт як значення, коли вам, мабуть, просто потрібне властивість з цього
об’єкта-

вибачте, забув встановити st3 = $ ('# subtotal'). load ('compz.php? prodid =' + x + '& qbuys =' + y);
Wern Ancheta

Відповіді:


170

Я думаю, ви хочете встановити відповідь на дзвінок на URL 'compz.php?prodid=' + x + '&qbuys=' + yяк значення текстового поля правильно? Якщо так, ви повинні зробити щось на кшталт:

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

Довідка: get()

У вас у коді дві помилки:

  • load()ставить HTML, повернутий з Ajax, у вказаний елемент:

    Завантажте дані з сервера та помістіть повернутий HTML у зібраний елемент.

    За допомогою цього методу не можна встановити значення текстового поля.

  • $(selector).load()повертає в JQuery об'єкт . За замовчуванням об’єкт перетворюється в [object Object]обробку як рядок.

Подальше уточнення :

Припустимо, що ваша URL-адреса повертається 5.

Якщо ваш HTML виглядає так:

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

то результат

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

буде

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

Але у своєму коді у вас є елемент введення. Теоретично (це недійсний HTML і не працює, як ви помітили), еквівалентний виклик призведе до

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

Але вам насправді потрібно

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

Тому використовувати не можна load(). Вам доведеться скористатися іншим методом, отримати відповідь і встановити його як значення самостійно.


чи справді стає складніше, якщо я просто хочу змінити місце завантаження результату? Мій код вище функціональний, коли я завантажую його в дів.
Wern Ancheta

1
@Ieyasu Sawada: Ну, зараз ви передаєте об’єкт JavaScript, $('#subtotal').val(str3);оскільки load()він не працює так, як ви думали, що він працює. Так, ви можете використовувати load()текст або HTML у значення, divале не як значення текстового поля.
Фелікс Клінг

@Ieyasu Sawada: Перегляньте моє оновлення для подальшого роз'яснення, сподіваюся, що це допоможе!
Фелікс Клінг

останнє запитання? Чому я отримую пробіли перед фактичним результатом на виході? Чи можливо знімати їх у jquery, в основному compz.php містить багато пробілів для кращої читабельності, а ті пробіли фактично виводяться разом із результатом
Wern Анчета

@Ieyasu Sawada: Ви можете використовувати звичайні функції JavaScript, наприклад, із виразом регламенту:data = data.replace(/\s+/, '');
Фелікс Клінг

56

Зауважте, що .valueатрибут є функцією JavaScript. Якщо ви хочете використовувати jQuery, використовуйте:

$('#pid').val()

щоб отримати значення, і:

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

встановити його.

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

Щодо вашого другого питання, я ніколи не намагався автоматично встановити значення HTML за допомогою loadметоду. Напевно, ви можете зробити щось подібне:

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

Зауважте, що наведений вище код не перевірений.

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


2
Варто вказати відповідну сторінку jQuery apival() для довідкових цілей.
Девід каже, що повернемо Моніку

1
Навіть якщо це занадто базовий спосіб, щоб це вказувати? Просто моя скромна думка ... Як би там не було оновлено!
Мауро

compz.php обчислює добуток двох чисел на вході. Я здогадуюсь частину, яка завантажує обчислені значення: $ ('# subtotal'). Load ('compz.php? Prodid =' + x + '& qbuys =' + y); трактується як об'єкт, тому я бачу об'єкт як вихідний, як тоді я конвертую його у нормальне значення
Wern Ancheta

1
Це ніколи не надто просто , погляньте на це питання ще раз. Якби він бачив сторінку чи знав її вміст, він, ймовірно, не ставив би питання =)
Девід каже повернути Моніку

1
Вказівка ​​на справжню проблему була б гарною відправною точкою Миру і любові;)
Мауро

5

Я хотів би зазначити вам, що .val () також працює з select, щоб вибрати поточне вибране значення.


0

спробуйте

subtotal.value= 5 // some value

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.