Saya sedang melalui beberapa kode lama pada formulir pengiriman dan mengganti JQuery dengan Vanilla JS.

Saat ini, saya memiliki fungsi ini yang menggunakan .val() (JQuery) untuk mengambil nilai untuk input yang tidak ditentukan:

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

Ketika saya menjalankan kode di browser saya, saya tidak mendapatkan masalah - kode dimaksudkan untuk bekerja hanya jika langganan diteruskan ke input - jika tidak ada, kami hanya mendapatkan nilai yang tidak ditentukan. Nilai yang dikembalikan oleh kombo JQuery dari log konsol $() dan .val() ke 'undefined'.

Ketika saya mengganti JQuery dengan Vanilla JS, seperti:

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

Dan kemudian coba jalankan formulir saya, saya mendapatkan kesalahan berikut di konsol:

Uncaught TypeError: Cannot read property 'value' of null

Mengapa ini terjadi? Dan apakah ada solusi untuk ini? Bantuan apa pun dihargai. Terima kasih sebelumnya.

0
snejame 28 Oktober 2019, 15:21

2 jawaban

Jawaban Terbaik

Hal ini terjadi karena

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

Tidak ada. Untuk Vanilla js, Anda perlu memeriksa apakah ada terlebih dahulu, lalu dapatkan nilainya jika ada. jQuery memiliki kegagalan diam untuk ini.

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 Oktober 2019, 13:20

Cukup gunakan syarat:

var elem = document.querySelector('input[name="subscription_id"]');
var subscription = elem ? elem.value : "";
0
mplungjan 28 Oktober 2019, 12:29