我创建了一个函数“getInfoProduits()”,其作用是获取产品信息并显示它们。为此,它使用“document.createElement(”div“);”创建“div”,它将包含产品信息。但问题是,每次我点击调用此函数的按钮时,这些div都会将每个调用与此函数相乘。这完全合乎逻辑,但我还没有解决方案。 这是功能:
function getInfoProduits()
{
var request = new XMLHttpRequest();
if(i<idProduits.length)
{
request.open("GET","http://patisserie-orient.fr/prestashop/prestashop/api/products/"+idProduits[i]+"?PHP_AUTH_USER="+PHP_AUTH_USER+"&ws_key="+ws_key,true);
request.onreadystatechange = function()
{
if(request.readyState==4)
{
//alert("Status2 is "+request.status);
if (request.status == 200 || request.status == 0)
{
response1 = request.responseXML.documentElement;
nameProduits[i] = response1.getElementsByTagName('name')[0].getElementsByTagName('language')[0].firstChild.data;
priceProduits[i] = response1.getElementsByTagName('price')[0].firstChild.data+" €";
descriptionProduits[i] = response1.getElementsByTagName('description_short')[0].getElementsByTagName('language')[0].firstChild.data;
quantitieProduitsDisponible[i] = response1.getElementsByTagName('quantity')[0].firstChild.data;
idImageProduits[i] = response1.getElementsByTagName('image')[0].getElementsByTagName('id')[0].firstChild.data;
maDiv = document.createElement("div");
maDiv.id = 'id_de_la_div'+i;
malabel = document.createElement("div");
malabel1 = document.createElement("div");
malabel.innerHTML=nameProduits[i];
malabel1.innerHTML=priceProduits[i];
maDiv.innerHTML='<img src='+url+' width="50" height="50" align="right">';
maDiv.className="ui-bar ui-bar-e cadre";
document.getElementById("divbar").appendChild(maDiv);
document.getElementById('id_de_la_div'+i).appendChild(malabel);
document.getElementById('id_de_la_div'+i).appendChild(malabel1);
maDivvide = document.createElement("div");
maDivvide.innerHTML='<br>';
document.getElementById("divbar").appendChild(maDivvide);
i++;
getInfoProduits1();
}
}
}
request.send();
}
else
{
return;
}
}
答案 0 :(得分:0)
“将处理程序附加到元素的事件。处理程序每个元素最多执行一次。”似乎是你需要的!
还有一个纯粹的JS解决方案
fnname = (function(){
var counter = 0;
return function(param1, param2, ...) {
if (counter > 0) {
return;
}
counter++;
// your normal function code here };
})();