Javascript 函数被多次执行
我无法发现导致函数多次执行的问题 下面的代码片段是当页面打开或发生更改时(无论是新数据还是更改的数据)。此函数从银行获取数据并显示,此部分我将不显示,因为它是不必要的。在显示它之后,它调用了两个函数,这是第一个给我带来问题的函数,更新函数Javascript 函数被多次执行,javascript,Javascript,我无法发现导致函数多次执行的问题 下面的代码片段是当页面打开或发生更改时(无论是新数据还是更改的数据)。此函数从银行获取数据并显示,此部分我将不显示,因为它是不必要的。在显示它之后,它调用了两个函数,这是第一个给我带来问题的函数,更新函数 function carteProduct_listProducts() { let dataProductsDatas = document.getElementById("data_products_datas");
function carteProduct_listProducts() {
let dataProductsDatas = document.getElementById("data_products_datas");
firebase.database().ref("Products").on("value", snapshot => {
dataProductsDatas.innerHTML = ""
snapshot.forEach(element => {
...
});
// Edit buttons event listener
// Update
modalEditProduct()
// Delete
realtimedb_delete("Products");
})
}
然后是更新函数,或者代码中的modalEditProduct。
我为此做了一个模态,因为我在使用一个模态时遇到了困难。
所以,这个函数在另一个函数中被调用。我想正是因为这个原因,我才提出了这个问题,这个函数被执行了两次,但是没有!我从那里取出了函数并进行了测试,但问题一直在发生
然后,当单击编辑按钮时,模式将打开。因此,它执行同一个函数中的一些函数
// Update product
function modalEditProduct() {
let editBtns = document.querySelectorAll("#data_products_datas .editBtn");
let productTitleInput = document.querySelector("#modalEditProduct form input[name='productTitle']");
let productCategoryInput = document.querySelector("#modalEditProduct form select[name='productCategory']");
let productPriceInput = document.querySelector("#modalEditProduct form input[name='productPrice']");
let productIngredientsInput = document.querySelector("#modalEditProduct form input[name='productIngredients']");
let productDescriptionInput = document.querySelector("#modalEditProduct form input[name='productDescription']");
let editSubmitBtn = document.querySelector("#modalEditProduct form button");
console.log(editBtns)
editBtns.forEach(element => {
element.addEventListener("click", (e) => {
let key = e.target.id;
// Open modal
modal_openModal("modalEditProduct");
// Get the data
let data = getData(key);
// putting categories on select
cartePorudct_puttingCategoriesSelect(productCategoryInput);
// let children = productCategoryInput.children;
// console.log(children)
// for (let i = 0; i < children.length; i++) {
// const element = children[i];
// console.log(element)
// }
// Insert the data in the field/inputs
setData(data);
// Submit form
editSubmitBtn.addEventListener("click", (e) => {
e.preventDefault();
realtimedb_verification("modalEditProduct", edit_productData, key)
})
})
});
// Get the data
function getData(key) {
let data;
firebase.database().ref("Products/"+key).on("value", snapshot => {
data = {
title: snapshot.val().title,
category: snapshot.val().category,
price: snapshot.val().price,
ingredients: snapshot.val().ingredients,
description: snapshot.val().description,
}
});
return data;
}
// Insert the data in the field/inputs
function setData(data) {
productTitleInput.value = data.title;
// productCategoryInput.value = data.category,
productPriceInput.value = data.price;
productIngredientsInput.value = data.ingredients;
productDescriptionInput.value = data.description;
}
// Submit form
function submitForm(btn, key){
}
// Data
function edit_productData(key) {
let data = {
title: productTitleInput.value,
category: productCategoryInput.value,
price: productPriceInput.value,
ingredients: productIngredientsInput.value,
description: productDescriptionInput.value,
}
// Update
realtimedb_update("Products", key, data);
}
}
//更新产品
函数modalEditProduct(){
让editbns=document.queryselectoral(“#data_products_datas.editbn”);
让productTitleInput=document.querySelector(“#modalEditProduct表单输入[name='productTitle']”);
让productCategoryInput=document.querySelector(“#modalEditProduct表单选择[name='productCategory']”);
让productPriceInput=document.querySelector(“#modaleditProductFormInput[name='productPrice']”);
让ProductingCreditsInput=document.querySelector(#modaleditProductFormInput[name='ProductComponents']);
让productDescriptionInput=document.querySelector(“#modalEditProduct表单输入[name='productDescription']”);
let editSubmitBtn=document.querySelector(“modalEditProduct表单按钮”);
console.log(editBtns)
editBtns.forEach(元素=>{
元素。addEventListener(“单击”,(e)=>{
让key=e.target.id;
//开放模态
modal_openModal(“modalEditProduct”);
//获取数据
let data=getData(键);
//将类别放在select上
cartePorudct_PuttingCategories选择(产品类别输入);
//让children=productCategoryInput.children;
//console.log(子级)
//for(设i=0;i{
e、 预防默认值();
实时数据库验证(“modalEditProduct”,编辑产品数据,密钥)
})
})
});
//获取数据
函数getData(键){
让数据;
firebase.database().ref(“Products/”+key).on(“value”,snapshot=>{
数据={
标题:snapshot.val().title,
类别:snapshot.val().category,
price:snapshot.val().price,
配料:snapshot.val(),
description:snapshot.val().description,
}
});
返回数据;
}
//在字段/输入中插入数据
函数setData(数据){
productTitleInput.value=data.title;
//productCategoryInput.value=data.category,
productPriceInput.value=data.price;
ProductingCreditsInput.value=data.Components;
productDescriptionInput.value=data.description;
}
//提交表格
功能提交表单(btn,密钥){
}
//资料
功能编辑\u productData(键){
让数据={
标题:productTitleInput.value,
类别:productCategoryInput.value,
价格:productPriceInput.value,
成分:生产要素投入价值,
描述:productDescriptionInput.value,
}
//更新
实时数据库更新(“产品”、密钥、数据);
}
}
无论如何,问题是。当我打开一个模式,进行更改并保存时,一切都很好。如果我打开另一个数据的模式,在我单击submit按钮后,以前的数据也将随该数据的值而更改。如果我打开第三个模式,一切都会再次发生。每次调用
modalEditProduct()
,都会向每个editBTN
添加一个新的事件侦听器
这意味着您第一次调用
modalEditProduct()
并单击按钮时,它只执行一次操作。第二次调用后,按钮现在有两个单击事件侦听器,因此单击它们将执行两次操作,以此类推。每次调用modalEditProduct()
,您都会向每个EditBTN
添加一个新的事件侦听器
这意味着您第一次调用
modalEditProduct()
并单击按钮时,它只执行一次操作。第二次调用后,按钮现在有两个单击事件侦听器,因此单击它们将执行两次操作,等等。您是说我在第一个函数中调用您吗?在这种情况下,这不是问题所在。我把它拿出来了,问题仍然存在。你是说我在第一个函数中给你打电话吗?在这种情况下,这不是问题所在。我把它拿了出来,问题仍然存在