Я собираюсь пройти через унаследованный код в форме отправки и заменить JQuery на / vanilla JS.

Прямо сейчас у меня есть эта функция, которая использует .val () (JQuery), чтобы получить значение для неопределенного ввода:

myFunction: function(){
          var subscription = $('input[name="subscription_id"]').val();
          // Do something with subscription
}

Когда я запускаю код в своем браузере, у меня не возникает проблем - код предназначен для работы только в том случае, если на вход передается подписка - если ее там нет, мы просто получаем неопределенное значение. Значение, возвращаемое комбинацией JQuery консоли $ () и .val (), записывается в 'undefined'.

Когда я заменяю JQuery на ванильный JS, вот так:

myFunction: function(){
          var subscription = document.querySelector('input[name="subscription_id"]').value;
          // Do something with subscription
}

И затем попробуйте запустить мою форму, я получаю следующую ошибку в консоли:

Uncaught TypeError: Cannot read property 'value' of null

Почему это происходит? И есть ли обходной путь для этого? Любая помощь приветствуется. Заранее спасибо.

0
yummylumpkins 28 Окт 2019 в 15:21

2 ответа

Лучший ответ

Это происходит потому, что

document.querySelector('input[name="subscription_id"]')

Не существует. Для vanilla js вам нужно сначала проверить, существует ли он, а затем получить значение, если оно есть. У jQuery тихая ошибка для этого.

var element = document.querySelector('input[name="subscription_id"]');

// If it exists, return its value, or null
var subscription = element ? element.value : null;
5
freedomn-m 28 Окт 2019 в 13:20

Просто используйте условие:

var elem = document.querySelector('input[name="subscription_id"]');
var subscription = elem ? elem.value : "";
0
mplungjan 28 Окт 2019 в 12:29
58590860