Вы добавляете новый прослушиватель событий на кнопку отправки каждый раз, когда вызываете addElementApparat
.
- Итак, при первом вызове
addElementApparat
вы добавляете первого слушателя, поэтому, когда пользователь нажимает кнопку отправки, он добавляет один документ. - При следующем вызове позвоните
addElementApparat
, вы добавите второго слушателя. Поэтому, когда пользователь нажимает кнопку отправки, один и тот же слушатель вызывается дважды, и добавляются два документа.
Возможные решения:
- Либо только добавить прослушиватель один раз.
- Удалите слушателя, когда он больше не нужен.
Самое простое изменение в вашем текущем коде - удалить слушателя, как только пользователь нажал кнопку отправки. Пример для одного из них:
let listener = addElement.addEventListener('submit', (e) => {
e.preventDefault();
addElement.removeListener('submit', listener);
db.collection('Apparater').doc('FX').collection('elementer').add({
navn: addElement['add-navn'].value,
verdi: addElement['add-verdi'].value
}).then(() => { // lukker ikke modalen slik at det skal være lettere å legge til flere uten å gå ut og inn
console.log('element successfully added');
addElement.reset();
});
})
В вашем текущем коде вам нужно будет повторить это для каждого if
.
Но я настоятельно рекомендую объединить все слушатели вместе, так как они, кажется, различаются только в незначительных деталях.
function addElementApparat() {
var x = document.getElementById('apparatusAdd').value;
const addElement = document.querySelector('#add-form');
var collectionName;
if (x === 'Frittstående') { // legger til elementer i FX
collectionName = "FX";
} else if (x === 'Bøyle') { // legger til elementer i PH
collectionName = "PH";
} else if (x === 'Ringer') { // legger til elementer i SR
collectionName = "SR";
} else if (x === 'Hopp') { // legger til elementer i VT
collectionName = "VT";
} else if (x === 'Skranke') {
collectionName = "PB";
} else if (x === 'Svingstang') {
collectionName = "HB";
} else {
console.log("Prøv på nytt");
return;
}
addElement.addEventListener('submit', (e) => {
e.preventDefault();
db.collection('Apparater').doc(collectionName).collection('elementer').add({
navn: addElement['add-navn'].value,
verdi: addElement['add-verdi'].value
}).then(() => {
console.log('element successfully added');
addElement.reset();
});
});
};
Еще проще использовать атрибут value
ваших option
элементов для хранения имени коллекции:
<option value="FX"> Frittstående </option>
<option value="PH"> Bøyle </option>
<option value="SR"> Ringer </option>
<option value="VT"> Hopp </option>
<option value="PB"> Skranke </option>
<option value="HB"> Svingstang </option>
Теперь вся ваша функция addElementApparat
может стать:
function addElementApparat() {
var collectionName = document.getElementById('apparatusAdd').value;
const addElement = document.querySelector('#add-form');
if (["FX", "PH", "SR", "VT", "PB", "HB"].indexOf(collectionName) >= 0) {
addElement.addEventListener('submit', (e) => {
e.preventDefault();
db.collection('Apparater').doc(collectionName).collection('elementer').add({
navn: addElement['add-navn'].value,
verdi: addElement['add-verdi'].value
}).then(() => {
console.log('element successfully added');
addElement.reset();
});
});
} else {
console.log("Prøv på nytt");
}
};
if (["FX", "PH", "SR", "VT", "PB", "HB"].indexOf(collectionName) >= 0) {
проверяет, является ли имя коллекции из формы действительным.