Почему скрипт отправляет дважды?

389
24 ноября 2016, 10:24

У меня есть скрипт который читает сайт на наличие div с определенным классом, в этот див подгружает форму, далее при заполнении формы слушаем событие click по классу и отправляем форму.

Проблема! Когда форм 2 на сайте, то получается что скрипт отправляет сразу две заявки вместо одной, хотя форма заполнена одна! Как поправить?

Код

// Находим все элементы куда встроить формы
    var EmbedForms = document.getElementsByClassName('EmbedForm');
    for( var i = 0; i < EmbedForms.length; i++ ) { 
        var Embed_Forms = EmbedForms[i];
        // Отправляем все данные в функцию загрузки и добавления форм
        EmbedFormAdd(EmbedForms[i].getAttribute('data-key-form'));
            function EmbedFormAdd(a){
                    var url = ''+HOST+'/formfromsite/embedform/'+ a; 
                    var XHR = ("onreadystatechange" in new XMLHttpRequest()) ? XMLHttpRequest : XDomainRequest;
                    var xhr = new XHR();
                    xhr.open('GET', url, true);
                    xhr.onload = function() {
                        FormOptions = JSON.parse(this.responseText);
                        if (FormOptions.succes == 1){
                            // Вставляем формы в div с подходящими ID
                            document.getElementById(''+a+'').innerHTML = FormOptions.formhtml;
                                // хаходим элементы с классом .send-bottom
                                var divs = document.querySelectorAll(".send-bottom");
                                // слушаем событие click по классу .send-bottom 
                                [].forEach.call(divs, function(div) {
                                    div.addEventListener("click", function() {  
                                            key_form = div.getAttribute('data-key-form');
                                            id_form_key = div.getAttribute('data-id-form-key');
                                            encoding_form = div.getAttribute('data-encoding-form');
                                            api_key = div.getAttribute('data-api-key');
                                            check_email = div.getAttribute('data-check-email');
                                            ya_metrik_id = div.getAttribute('data-ya-metrik-id') || 0;
                                            ya_metrik_goals = div.getAttribute('data-ya-metrik-goals') || "";

                                            var form_block = document.getElementById('form_' +key_form+ '');
                                            var contact_name = document.getElementById('contact_name_' +key_form+ '');
                                            var contact_phone = document.getElementById('contact_phone_' +key_form+ '');        
                                            var text_after_send_form = document.getElementById('text_after_send_form_' +key_form+ '');      
                                            if(check_email == 1) {
                                                var contact_email = encodeURIComponent(document.getElementById('contact_email_' +key_form+ '').value);
                                            }
                                            // отправляем данные полученные из полей
                                                if(contact_name.value.length >= 2){
                                                    if(contact_phone.value.length >= 7){

                                                        sendFunction(HOST +'?api_key='+ api_key +'&name=' + encodeURIComponent(contact_name.value) + '&phone=' + encodeURIComponent(contact_phone.value) + '&email=' + contact_email + '&idform='+ id_form_key +'&encoding='+ encoding_form_ucrm +'&add_vid=form_embed&hash_person=' + hash_person + '&project_site=' + project_site + '&page_site_project=' + page_site_project + '&page_site_project=' + page_site_project);
                                                        form_block.style.display = "none";
                                                        text_after_send.style.display = "block";
                                                        if (ya_metrik_id !== '0') {
                                                            if (ya_metrik_id !== '') {
                                                                window['yaCounter'+ ya_metrik_id].reachGoal(ya_metrik_goals);
                                                            }
                                                        }
                                                        // ждем немного, до закрытия окна.
                                                        setTimeout(function(){
                                                            form_block.style.display = "block";
                                                            text_after_send_form.style.display = "none";
                                                        }, 8000);
                                                    } else {contact_phone.className +=" input-fb-error"; contact_phone.onclick = function(){contact_phone.className = contact_phone.className.replace( /(?:^|\s)input-fb-error(?!\S)/ , '' );};}        
                                                } else {contact_name.className +=" input-fb-error";  contact_name.onclick = function(){contact_name.className = contact_name.className.replace( /(?:^|\s)input-fb-error(?!\S)/ , '' );};}       

                                        });
                                    });  
                        }
                    }
                xhr.onerror = function() {
                    // alert( 'Ошибка ' + this.status );
                    //console.log( 'Ошибка ' + this.status);
                }
                xhr.send();
            } 
    }
READ ALSO
Не работает регулярное выражение в js

Не работает регулярное выражение в js

Что бы я не вводил, приложение переходит ко второму окну.

400
Выбор значения элемента select и подставить в тег input

Выбор значения элемента select и подставить в тег input

Есть выпадающий список (select) и текстовое поле (input) в одной форме. При выборе элемента из select я получаю его значение.

581
JS - OneSignal SDK Ищет файлы не в указанной директории

JS - OneSignal SDK Ищет файлы не в указанной директории

Здравствуйте ребята. Помогите пожалуйста понять в чем проблема.

525
Почему не отрабатывает функция JS?

Почему не отрабатывает функция JS?

Есть у меня следующий код:.

476