Разница между $this.text и $this.value и почему 1 возвращает нулевое значение?

#javascript #jquery

#javascript #jquery

Вопрос:

У меня возникла проблема со скриптом, содержащим строки ниже (верхняя часть закомментирована прямо сейчас). Они находятся в цикле, чтобы выполнить суммирование текстовых полей в форме. Тем не менее, я получаю: ‘Uncaught TypeError: не удается прочитать свойство ‘0’ из undefined’ при выполнении этого. Если я закомментирую нижнюю строку и раскомментирую верхнюю строку, все работает нормально.

Я все еще хочу сохранить функцию replace, и я не уверен, как это сделать.

 total  = $(this).text();

//difference and why the previous works, but the below returns null, but if

total  = ($(this).all[0].value.replace(/D/g, '')) * 1
 

РЕДАКТИРОВАТЬ: должен был упомянуть, что это было то, что мне нужно было отладить, и обнаружил эту ошибку.

Комментарии:

1. Что такое .all ? Почему бы просто total = ($(this).val().replace(/D/g, '')) * 1

2. Является $(this) ли тип ввода текстовым?

Ответ №1:

.text() возвращает или задает текст внутри элемента.

Например: <p>Hello World</p>

console.log($('p').text()) вернет Hello World

.value() это не метод jquery, вместо этого используйте .val()

.val() используется для получения или установки значения поля ввода.

Например <input type="text"> , если вы хотите получить или установить значение ввода, скажем, в форме отправки, вы бы использовали что-то вроде $('input').val()

Комментарии:

1. Это было оно. Отредактировал свой пост слишком рано, но я этого не писал, так что спасибо за помощь!

Ответ №2:

1. .text не существует как свойство текстового поля. Чтобы получить его значение, используйте val() (см. 2)

2. Вы смешиваете ванильный JS с вашим jQuery. .value должно быть .val() .

3. Что вы пытаетесь сделать с .all …? Это значение null, на которое ссылается ваша ошибка.

4. Я думаю, это может быть то, что вы хотите:

 var total = 0;

$('input[type="text"]').each(function() {
   total  = ($(this).val().replace(/D/g, '')) * 1
});

alert("Your total is "   total);
 

Пример: JSFiddle

Комментарии:

1. Это было оно. Отредактировал свой пост слишком рано, но я этого не писал, так что спасибо за помощь!