#javascript #html #jquery
#javascript #HTML #jquery
Вопрос:
У меня возникли проблемы с получением отправленной опции на странице html, где я динамически создаю несколько форм, соответствующие <select>
и <option>
значения внутри нее.
Это мой html
<div class="inputs_container">
</div>
мой js:
var data = {
"name": "forest",
"inputs": [
{
"name": "input_1", "formats": ["JPG"]
},
{
"name": "input_2", "formats": ["TXT","ODT"]
}
]
}
var data_files = {
"resources": [
{"name": "file_1.jpg", "format": "JPG"},
{"name": "file_2.jpg", "format": "JPG"},
{"name": "text_1.txt", "format": "TXT"},
{"name": "text_2.txt", "format": "TXT"},
{"name": "odt_1.odt", "format": "ODT"},
{"name": "odt_2.odt", "format": "ODT"}
]
}
document.addEventListener('DOMContentLoaded', function() {
$.each(data.inputs, function(i, input) {
let format_in = input.formats;
var form_id = input.name;
var select_id = form_id "_id";
var select_name = form_id "_name";
let $h5 = $(`<h5>Select ${input.formats} file</h5>`).appendTo('.inputs_container');
$('<form>', {
"id": form_id,
"html": '<div class="input_field s12 l6"> <select id="' select_id '" name= "' select_name '"> </select> </div> <div class="col s12 l6"><button class="btn blue" type="submit"> submit</button> </div>'
}).appendTo(`.inputs_container`);
var select = document.getElementById(select_id);
var file_list_URI = serverURI "/resources?formats=" format_in "";
$.getJSON(file_list_URI, function(file){
$.each(file.resources, function(j, fieldopt){
select.add(new Option(fieldopt.name, fieldopt.name));
}); // each
M.FormSelect.init(document.querySelectorAll('select'));
var input_form = document.getElementById(form_id);
input_form.onsubmit = function(e) {
e.preventDefault();
var input_file = input_form.select_name.value;
console.log(" FORM SUBMIT " input_file);
}
});
});
});
Код отображает два поля выбора (с правильными параметрами), одно для JPG
и одно для TXT, ODT
форматов файлов. Но когда я нажимаю любую из двух кнопок отправки, я получаю
Uncaught TypeError: input_form.select_name is undefined
Может ли кто-нибудь помочь мне исправить эту ошибку?
Заранее благодарю
Комментарии:
1. Вы пробовали запускать ее через отладчик?
2. @ControlAltDel: какой отладчик? извините, новичок здесь
3. Попробуйте:
var input_file = input_form.querySelector("[name=" select_name "]").value;
4. @user123892 Обычно, если вы нажмете F12 в своем браузере, вы можете открыть dubugger. Установите точку останова и запустите страницу снова
5. @LouysPatriceBessette: спасибо, это работает!! если вы опубликуете свое решение в ответе, я могу его принять..
Ответ №1:
Ошибка, с которой вы столкнулись, возникает в этой строке:
var input_file = input_form.select_name.value;
Сообщение об ошибке Uncaught TypeError: input_form.select_name is undefined
означает select_name
, что не определено.
select_name
здесь не та переменная, которую вы объявили парой строк выше. Это свойство input_form
элемента, найденного document.getElementById(form_id);
.
Выбранный элемент, на который вы хотите настроить таргетинг, является дочерним элементом этого элемента формы… Поэтому вы должны настроить на нее таргетинг, и .querySelector() — правильный метод для этого.
Поэтому измените его на:
var input_file = input_form.querySelector("[name=" select_name "]").value;
Комментарии:
1. Дайте мне знать, если объяснения понятны и полны 😉
2. Да, это понятно и полезно!! еще раз спасибо