созданный div с document.createElement (div);умножается в каждом вызове - PullRequest
0 голосов
/ 16 марта 2012

Я создаю функцию «getInfoProduits ()», роль которой состоит в том, чтобы получать информацию о продуктах и ​​отображать их. Для этого он создает «div» с помощью «document.createElement (« div »);», который будет содержать информацию о продуктах. Но проблема в том, что эти div умножает каждый вызов этой функции, каждый раз, когда я нажимаю на кнопку, которая вызывает эту функцию. Это абсолютно логично, но у меня все еще нет решения. Это функция th:

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;
        }

}

1 Ответ

0 голосов
/ 16 марта 2012

"Присоединить обработчик к событию для элементов. Обработчик выполняется не более одного раза для каждого элемента."Кажется, что вам нужно!

jQuery .one ()

Существует также чистое решение JS

fnname = (function(){
    var counter = 0; 
    return function(param1, param2, ...) {
        if (counter > 0) {
            return;
        }
        counter++;

        // your normal function code here   };
})();
...