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

107

Как правильно загрузить определенное значение в текстовое поле с помощью jquery? Пробовал приведенный ниже, но я получаю результат [object Object]as. Пожалуйста, просветите меня по этому поводу, я новичок в 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);
Верн Анчета

Ответы:

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(). Вы должны использовать другой метод, получить ответ и самостоятельно установить его как значение.

Феликс Клинг
источник
действительно ли становится сложнее, если я просто хочу изменить место загрузки результата? Мой код выше работает, когда я загружаю его в div.
Wern Ancheta
1
@Ieyasu Sawada: Ну, в настоящее время вы передаете объект JavaScript, $('#subtotal').val(str3);потому что load()он не работает так, как вы думали. Да, вы можете использовать load()для загрузки текста или HTML в значение, divно не как текстовое поле.
Felix Kling
@Ieyasu Sawada: См. Мое обновление для дальнейших разъяснений, надеюсь, это поможет!
Феликс Клинг,
последний вопрос? Почему я получаю пробелы перед фактическим результатом на выходе? Можно ли разделить их в jquery, в основном compz.php содержит много пробелов для лучшей читаемости, и эти пробелы фактически выводятся вместе с результатом
Верн Ancheta
@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
Может быть, даже если это слишком просто, чтобы указать на это? Просто мое скромное мнение ... Во всяком случае обновлено!
Mauro
compz.php вычисляет произведение 2 чисел во входных данных. Я предполагаю, что часть, которая загружает вычисленные значения: $ ('# subtotal'). Load ('compz.php? Prodid =' + x + '& qbuys =' + y); обрабатывается как объект, поэтому я вижу объект как выходной, как мне преобразовать его в нормальное значение
Верн Анчета
1
Это никогда не бывает слишком простым , посмотрите на вопрос еще раз. Если бы он видел страницу или знал ее содержание, он, вероятно, не задал бы вопрос =)
Дэвид говорит,
1
Указание на настоящую проблему было бы хорошей отправной точкой для Мира и Любви;)
Мауро
5

Я хотел бы указать вам, что .val () также работает с select для выбора текущего выбранного значения.

Оливер М. Греч
источник
0

пытаться

subtotal.value= 5 // some value

Камил Келчевски
источник