В своем html я создал таблицу и извлек данные из БД. Цель этой таблицы — предоставить мнение ученого для каждого ученика, поэтому я создал раскрывающийся список выбора для каждого типа школы с возможностью выбора разных мнений.
<table>
<tr>
<th>Nom</th>
<th>Prénom</th>
<th>BTS</th>
<th>IUT</th>
<th>Licence</th>
<th>CPGE</th>
<th>Ecole</th>
</tr>
<!-- PHP CODE TO FETCH DATA FROM ROWS -->
<?php
// LOOP TILL END OF DATA
while($rows=$result->fetchArray(SQLITE3_ASSOC))
{
?>
<tr>
<!-- FETCHING DATA FROM EACH
ROW OF EVERY COLUMN -->
<td><?php echo $rows['NOM'];?></td>
<td><?php echo $rows['PRENOM'];?></td>
<td><select name = "Avis" id = "avis_BTS" onchange = "change()">
<option value = "">Avis</option>
<option value = "TF">Très Favorable</option>
<option value = "F">Favorable</option>
<option value = "R">Réservé</option>
<option value = "D">Défavorable</option>
</select>
</td>
<td><select name = "Avis" id = "avis_IUT" onchange = "change()">>
<option value = "">Avis</option>
<option value = "TF">Très Favorable</option>
<option value = "F">Favorable</option>
<option value = "R">Réservé</option>
<option value = "D">Défavorable</option>
</select>
</td>
<td><select name = "Avis" id = "avis_Licence" onchange = "change()">>
<option value = "">Avis</option>
<option value = "TF">Très Favorable</option>
<option value = "F">Favorable</option>
<option value = "R">Réservé</option>
<option value = "D">Défavorable</option>
</select>
</td>
<td><select name = "Avis" id = "avis_CPGE" onchange = "change()">>
<option value = "">Avis</option>
<option value = "TF">Très Favorable</option>
<option value = "F">Favorable</option>
<option value = "R">Réservé</option>
<option value = "D">Défavorable</option>
</select>
</td>
<td><select name = "Avis" id = "avis_Ecole" onchange = "change()">>
<option value = "">Avis</option>
<option value = "TF">Très Favorable</option>
<option value = "F">Favorable</option>
<option value = "R">Réservé</option>
<option value = "D">Défavorable</option>
</select>
</td>
</tr>
<?php
}
?>
</table>
Я также создал файл сценария Java, но он не работает.
Импортировать в html
<!DOCTYPE html>
<html lang = "fr">
<head>
<meta charset = "utf-8">
<script type = "text/javascript" src = "script.js"></script>
<title>Avis Terminales</title>
JS-файл
// Initialisation des variables
var avis = "";
// fonction pour bien montrer visuellement au professeur que e choix a été validé
function change()
{
if (document.getElementsByID("avis_BTS").value != ""){
document.getElementById("avis_BTS").style.backgroundColor = "green";
}
}
// Pour récuperer les avis et les mettres dans une variable pour chaque élève
function save()
{
//var avis_bts = document.getElementById("avis_BTS").value;
// document.write(avis_bts);
//document.write(5+6);
let selection = document.getElementById('avis_BTS');
if (selection.selectedIndex == 1){
a = "Très Favorable";
}
else if (selection.selectedIndex == 2){
a = "Favorable";
}
else{
a = "Avis";
}
document.getElementById('reponse2').innerHTML = "hello";
}
На моей веб-странице ничего не изменилось
В консоли браузера нет ошибок? getElementsByID — опечатка!
@CBroe, ты знаешь, как это исправить?
@brombeer в консоли браузера ошибок нет, но спасибо, я исправил
Немного сложно сказать, чего вы на самом деле хотите здесь достичь (и комментарии в коде на французском языке тоже не особо полезны). Прямо сейчас мы даже не можем увидеть, где будет вызываться эта save функция.
@brombeer Да, это очень странно. Я думаю, что между моим браузером и моим кодом существует реальная проблема.
Функция сохранения @CBroe предназначена для получения значений из таблицы и сохранения изменений для каждого ученика в базе данных. Функция вызывается при нажатии на кнопку «Валидер».



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Делегирование поможет, если вам нужно обработать изменения при каждом выборе.
Как уже упоминалось, идентификаторы должны быть уникальными. Если вы удалите встроенное изменение, добавите thead и tbody и получите что-то вроде этого, идентификаторы не будут использоваться сценарием.
Если вы измените id на data-avisid, ваш HTML будет действительным, и вместо этого вы сможете получить avis, используя select.dataset.avisid.
Альтернативно измените имена выбранных элементов, чтобы они соответствовали avis.
window.addEventListener('DOMContentLoaded', () => {
const table = document.querySelector('table tbody');
const rows = table.querySelectorAll('tr');
table.addEventListener('change', (e) => { // on change of any select
const tgt = e.target;
if (!tgt.matches('select[name=Avis')) return; // not a select
const avis = Array.from(rows).map(row => {
const name = Array.from(row.querySelectorAll('td'))
.slice(0, 2)
.map(cell => cell.textContent)
.join(', '); // name
const avis = Array.from(row.querySelectorAll('select'))
.map(select => ({ [select.dataset.avisid]: select.value }));
return { "Nom": name, avis };
});
console.info(avis); // here you can AJAX the values
});
});<table>
<thead>
<tr>
<th>Nom</th>
<th>Prénom</th>
<th>BTS</th>
<th>IUT</th>
<th>Licence</th>
<th>CPGE</th>
<th>Ecole</th>
</tr>
</thead>
<tbody>
<tr>
<td>Nom1</td>
<td>Prenom1</td>
<td>
<select name = "Avis" data-avisid = "avis_BTS">
<option value = "">Avis</option>
<option value = "TF">Très Favorable</option>
<option value = "F">Favorable</option>
<option value = "R">Réservé</option>
<option value = "D">Défavorable</option>
</select>
</td>
<td>
<select name = "Avis" data-avisid = "avis_IUT">
<option value = "">Avis</option>
<option value = "TF">Très Favorable</option>
<option value = "F">Favorable</option>
<option value = "R">Réservé</option>
<option value = "D">Défavorable</option>
</select>
</td>
<td>
<select name = "Avis" data-avisid = "avis_Licence">
<option value = "">Avis</option>
<option value = "TF">Très Favorable</option>
<option value = "F">Favorable</option>
<option value = "R">Réservé</option>
<option value = "D">Défavorable</option>
</select>
</td>
<td>
<select name = "Avis" data-avisid = "avis_CPGE">
<option value = "">Avis</option>
<option value = "TF">Très Favorable</option>
<option value = "F">Favorable</option>
<option value = "R">Réservé</option>
<option value = "D">Défavorable</option>
</select>
</td>
<td>
<select name = "Avis" data-avisid = "avis_Ecole">
<option value = "">Avis</option>
<option value = "TF">Très Favorable</option>
<option value = "F">Favorable</option>
<option value = "R">Réservé</option>
<option value = "D">Défavorable</option>
</select>
</td>
</tr>
<tr>
<td>Nom2</td>
<td>Prenom2</td>
<td>
<select name = "Avis" data-avisid = "avis_BTS">
<option value = "">Avis</option>
<option value = "TF">Très Favorable</option>
<option value = "F">Favorable</option>
<option value = "R">Réservé</option>
<option value = "D">Défavorable</option>
</select>
</td>
<td>
<select name = "Avis" data-avisid = "avis_IUT">
<option value = "">Avis</option>
<option value = "TF">Très Favorable</option>
<option value = "F">Favorable</option>
<option value = "R">Réservé</option>
<option value = "D">Défavorable</option>
</select>
</td>
<td>
<select name = "Avis" data-avisid = "avis_Licence">
<option value = "">Avis</option>
<option value = "TF">Très Favorable</option>
<option value = "F">Favorable</option>
<option value = "R">Réservé</option>
<option value = "D">Défavorable</option>
</select>
</td>
<td>
<select name = "Avis" data-avisid = "avis_CPGE">
<option value = "">Avis</option>
<option value = "TF">Très Favorable</option>
<option value = "F">Favorable</option>
<option value = "R">Réservé</option>
<option value = "D">Défavorable</option>
</select>
</td>
<td>
<select name = "Avis" data-avisid = "avis_Ecole">
<option value = "">Avis</option>
<option value = "TF">Très Favorable</option>
<option value = "F">Favorable</option>
<option value = "R">Réservé</option>
<option value = "D">Défavorable</option>
</select>
</td>
</tr>
<tr>
<td>Nom3</td>
<td>Prenom3</td>
<td>
<select name = "Avis" data-avisid = "avis_BTS">
<option value = "">Avis</option>
<option value = "TF">Très Favorable</option>
<option value = "F">Favorable</option>
<option value = "R">Réservé</option>
<option value = "D">Défavorable</option>
</select>
</td>
<td>
<select name = "Avis" data-avisid = "avis_IUT">
<option value = "">Avis</option>
<option value = "TF">Très Favorable</option>
<option value = "F">Favorable</option>
<option value = "R">Réservé</option>
<option value = "D">Défavorable</option>
</select>
</td>
<td>
<select name = "Avis" data-avisid = "avis_Licence">
<option value = "">Avis</option>
<option value = "TF">Très Favorable</option>
<option value = "F">Favorable</option>
<option value = "R">Réservé</option>
<option value = "D">Défavorable</option>
</select>
</td>
<td>
<select name = "Avis" data-avisid = "avis_CPGE">
<option value = "">Avis</option>
<option value = "TF">Très Favorable</option>
<option value = "F">Favorable</option>
<option value = "R">Réservé</option>
<option value = "D">Défavorable</option>
</select>
</td>
<td>
<select name = "Avis" data-avisid = "avis_Ecole">
<option value = "">Avis</option>
<option value = "TF">Très Favorable</option>
<option value = "F">Favorable</option>
<option value = "R">Réservé</option>
<option value = "D">Défavorable</option>
</select>
</td>
</tr>
</tbody>
</table>Тот же код, но с использованием кнопки отправки
window.addEventListener('DOMContentLoaded', () => {
const table = document.querySelector('table tbody');
const rows = table.querySelectorAll('tr');
document.getElementById('avisForm').addEventListener('submit', (e) => { // submitting
e.preventDefault(); // cancel the submit
const avis = Array.from(rows).map(row => {
const name = Array.from(row.querySelectorAll('td'))
.slice(0, 2)
.map(cell => cell.textContent)
.join(', '); // name
const avis = Array.from(row.querySelectorAll('select'))
.map(select => ({ [select.name]: select.value }));
return { "Nom": name, avis };
});
console.info(avis); // here you can AJAX the values
});
});<form id = "avisForm">
<table>
<thead>
<tr>
<th>Nom</th>
<th>Prénom</th>
<th>BTS</th>
<th>IUT</th>
<th>Licence</th>
<th>CPGE</th>
<th>Ecole</th>
</tr>
</thead>
<tbody>
<tr>
<td>Nom1</td>
<td>Prenom1</td>
<td>
<select name = "BTS">
<option value = "">Avis</option>
<option value = "TF">Très Favorable</option>
<option value = "F">Favorable</option>
<option value = "R">Réservé</option>
<option value = "D">Défavorable</option>
</select>
</td>
<td>
<select name = "IUT">
<option value = "">Avis</option>
<option value = "TF">Très Favorable</option>
<option value = "F">Favorable</option>
<option value = "R">Réservé</option>
<option value = "D">Défavorable</option>
</select>
</td>
<td>
<select name = "Licence">
<option value = "">Avis</option>
<option value = "TF">Très Favorable</option>
<option value = "F">Favorable</option>
<option value = "R">Réservé</option>
<option value = "D">Défavorable</option>
</select>
</td>
<td>
<select name = "CPGE">
<option value = "">Avis</option>
<option value = "TF">Très Favorable</option>
<option value = "F">Favorable</option>
<option value = "R">Réservé</option>
<option value = "D">Défavorable</option>
</select>
</td>
<td>
<select name = "Ecole">
<option value = "">Avis</option>
<option value = "TF">Très Favorable</option>
<option value = "F">Favorable</option>
<option value = "R">Réservé</option>
<option value = "D">Défavorable</option>
</select>
</td>
</tr>
<tr>
<td>Nom2</td>
<td>Prenom2</td>
<td>
<select name = "BTS">
<option value = "">Avis</option>
<option value = "TF">Très Favorable</option>
<option value = "F">Favorable</option>
<option value = "R">Réservé</option>
<option value = "D">Défavorable</option>
</select>
</td>
<td>
<select name = "IUT">
<option value = "">Avis</option>
<option value = "TF">Très Favorable</option>
<option value = "F">Favorable</option>
<option value = "R">Réservé</option>
<option value = "D">Défavorable</option>
</select>
</td>
<td>
<select name = "Licence">
<option value = "">Avis</option>
<option value = "TF">Très Favorable</option>
<option value = "F">Favorable</option>
<option value = "R">Réservé</option>
<option value = "D">Défavorable</option>
</select>
</td>
<td>
<select name = "CPGE">
<option value = "">Avis</option>
<option value = "TF">Très Favorable</option>
<option value = "F">Favorable</option>
<option value = "R">Réservé</option>
<option value = "D">Défavorable</option>
</select>
</td>
<td>
<select name = "Ecole">
<option value = "">Avis</option>
<option value = "TF">Très Favorable</option>
<option value = "F">Favorable</option>
<option value = "R">Réservé</option>
<option value = "D">Défavorable</option>
</select>
</td>
</tr>
<tr>
<td>Nom3</td>
<td>Prenom3</td>
<td>
<select name = "BTS">
<option value = "">Avis</option>
<option value = "TF">Très Favorable</option>
<option value = "F">Favorable</option>
<option value = "R">Réservé</option>
<option value = "D">Défavorable</option>
</select>
</td>
<td>
<select name = "IUT">
<option value = "">Avis</option>
<option value = "TF">Très Favorable</option>
<option value = "F">Favorable</option>
<option value = "R">Réservé</option>
<option value = "D">Défavorable</option>
</select>
</td>
<td>
<select name = "Licence">
<option value = "">Avis</option>
<option value = "TF">Très Favorable</option>
<option value = "F">Favorable</option>
<option value = "R">Réservé</option>
<option value = "D">Défavorable</option>
</select>
</td>
<td>
<select name = "CPGE">
<option value = "">Avis</option>
<option value = "TF">Très Favorable</option>
<option value = "F">Favorable</option>
<option value = "R">Réservé</option>
<option value = "D">Défavorable</option>
</select>
</td>
<td>
<select name = "Ecole">
<option value = "">Avis</option>
<option value = "TF">Très Favorable</option>
<option value = "F">Favorable</option>
<option value = "R">Réservé</option>
<option value = "D">Défavorable</option>
</select>
</td>
</tr>
</tbody>
</table>
<input type = "submit" value = "Sauvegarder" />
</form>
Идентификаторы должны быть уникальными, но с выходными данными, которые вы создаете в своем цикле, ваши идентификаторы не будут уникальными - так что это самое первое, что вам нужно исправить здесь.