PageSourceSearch

https://softline.ru/local/templates/softline/assets/js/forms.js?179033758314570

js softline.ru collected 2026-10-01 08:13:35 UTC 14,570 bytes, 360 lines download raw bytes

1// ============================================================
2// Функция отправки формы с токеном (исправлена: дублирование токена, русские сообщения)
3// ============================================================
4
5function sendFormWithCaptcha(form, token) {
6  console.log('sendFormWithCaptcha вызвана для формы:', form);
7
8  if (!form || !form.tagName || form.tagName !== 'FORM') {
9    console.error('Неверный элемент формы');
10    alert('Произошла ошибка. Пожалуйста, попробуйте снова.');
11    return;
12  }
13
14  // ---- Определяем URL для отправки на основе класса/ID ----
15  var action = $(form).attr('action');
16  if (!action || action === '#' || action === '') {
17    if ($(form).hasClass('send_feedback_form')) {
18      action = '/send_form_1.php';
19    } else if ($(form).is('#qualityDepartmentFeedbackForm')) {
20      action = '/form_handlers/qualityDepartmentFeedback.php';
21    } else if ($(form).hasClass('event_register_form')) {
22      action = '/send_form_event.php';
23    } else {
24      action = window.location.href;
25    }
26  }
27  // ---------------------------------------------------------
28
29  // Используем FormData, чтобы избежать дублирования токена
30  var formData = new FormData(form);
31  // Удаляем все поля с именем 'smart-token' (если они уже есть)
32  formData.delete('smart-token');
33  // Добавляем наш токен
34  formData.append('smart-token', token);
35
36  sendForm(action, form, formData);
37}
38
39function sendForm(action, form, formData) {
40  var loader = '/local/templates/softline/assets/images/loadingwhite.gif';
41  var $linkRed = $(form).find('.link-red');
42  if ($linkRed.length) {
43    $linkRed.after('<p id="loading_span_wait"><img src="' + loader + '" alt="Отправка..." style="margin-right: 0.5em;" /> Отправляем запрос...</p>');
44  } else {
45    $(form).append('<p id="loading_span_wait"><img src="' + loader + '" alt="Отправка..." style="margin-right: 0.5em;" /> Отправляем запрос...</p>');
46  }
47
48  $(form).find('input, textarea, .registration__subtitle, .vacancy__bottom, .custom-select').slideUp();
49  $(form).find('.link-red').slideUp();
50
51  $.ajax({
52    type: 'POST',
53    url: action,
54    data: formData,
55    processData: false,
56    contentType: false,
57    dataType: 'text',
58    timeout: 10000,
59    success: function(responseText) {
60      console.log('Ответ сервера (сырой):', responseText);
61
62      // Базовое сообщение по умолчанию – для формы "Свяжитесь со мной"
63      var defaultThankYou = '<p style="font-size: 2rem;">Благодарим Вас за сделанный запрос на сайте компании Softline! Он принят в работу.<br>В ближайшее время с Вами свяжется менеджер компании Softline.<br><br><br></p>';
64      // Для формы регистрации на мероприятие – своё сообщение
65      if ($(form).hasClass('event_register_form')) {
66        defaultThankYou = '<p style="font-size: 2rem;">Ваша заявка принята на рассмотрение.</p>';
67      }
68
69      var thankYou = defaultThankYou;
70      var fileLink = '';
71
72      try {
73        var msg = JSON.parse(responseText);
74        if (msg && msg.THANKYOU) {
75          thankYou = '<p>' + msg.THANKYOU + '</p>';
76        }
77        if (msg && msg.FILE) {
78          fileLink = '<p style="margin-top: 1em"><a href="' + msg.FILE + '" target="_blank">Скачать материалы</a></p>';
79        }
80      } catch (e) {
81        if (responseText && responseText.trim().length > 0) {
82          thankYou = '<p>' + responseText + '</p>';
83        }
84        console.warn('Ответ не является валидным JSON, используем как текст.');
85      }
86
87      $(form).find('#loading_span_wait').html(thankYou + fileLink);
88
89      let yandex_target_id = $(form).find('.yandex_target_id');
90      if (yandex_target_id) {
91        ym(45135768, 'reachGoal', yandex_target_id);
92      }
93    },
94    error: function(xhr, status, error) {
95      console.error('Ошибка AJAX:', status, error);
96      console.error('Текст ответа:', xhr.responseText);
97      var errorMsg = '<p><b>Ошибка</b> при отправке запроса, пожалуйста, попробуйте еще раз.</p>';
98      if (xhr.responseText && xhr.responseText.trim().length > 0) {
99        try {
100          var errObj = JSON.parse(xhr.responseText);
101          if (errObj && errObj.message) {
102            errorMsg = '<p><b>Ошибка:</b> ' + errObj.message + '</p>';
103          }
104        } catch (e) {
105          errorMsg = '<p><b>Ошибка:</b> ' + xhr.responseText + '</p>';
106        }
107      }
108      $(form).find('#loading_span_wait').html(errorMsg);
109    }
110  });
111}
112
113// ============================================================
114// Обработчики отправки форм (с русскими сообщениями)
115// ============================================================
116
117$(document).ready(function () {
118
119  // ---------- Inputmask (без изменений) ----------
120  if ($('input[type="tel"]').length > 0) {
121    $('input[type="tel"]').inputmask("+7(999)999-99-99", {
122      onincomplete: function () {
123        if ($(this).val() !== "") {
124          alert("Пожалуйста, введите корректный номер телефона");
125          $(this).css("borderColor", "#d10000");
126        }
127        console.log($(this).val());
128      },
129      oncomplete: function () {
130        $(this).css("borderColor", "#c1c1c1");
131      }
132    });
133
134    if (window.location.href.indexOf('softline_security_day_effektivnye_resheniya_dly
134a_globalnykh_vyzovov_03_10_2025') !== -1) {
135      $('.event_register_form input[type="tel"]').addClass('uzb2');
136      $('input[type="tel"].uzb2').inputmask({
137        mask: ["+7(999)999-99-99", "+998(99)999-99-99"],
138        placeholder: "",
139        showMaskOnFocus: false,
140        showMaskOnHover: false,
141        keepStatic: false,
142        jitMasking: true,
143        clearMaskOnLostFocus: false,
144        onincomplete: function () {
145          if ($(this).val() !== "") {
146            alert("Пожалуйста, введите корректный номер телефона");
147            $(this).css("borderColor", "#d10000");
148          }
149          console.log($(this).val());
150        },
151        oncomplete: function () {
152          $(this).css("borderColor", "#c1c1c1");
153        }
154      });
155    }
156
157    $('input[type="tel"].uzb').inputmask({
158      mask: ["+7(999)999-99-99", "+998(99)999-99-99"],
159      placeholder: "",
160      showMaskOnFocus: false,
161      showMaskOnHover: false,
162      keepStatic: false,
163      jitMasking: true,
164      onincomplete: function () {
165        if ($(this).val() !== "") {
166          alert("Пожалуйста, введите корректный номер телефона");
167          $(this).css("borderColor", "#d10000");
168        }
169        console.log($(this).val());
170      },
171      oncomplete: function () {
172        $(this).css("borderColor", "#c1c1c1");
173      }
174    });
175  }
176
177  // ---------- Регистрация на мероприятие (с каптчей) ----------
178  $("body").on("submit", ".event_register_form", function (e) {
179    e.preventDefault();
180    console.log('Отправка .event_register_form');
181
182    // Проверка согласия
183    if (!$('#mainpolicy').is(":checked")) {
184      $("#mainpolicy_element").addClass("must_sign");
185      console.log('Чекбокс не отмечен');
186      return false;
187    }
188
189    var action = window.location.href;
190    var formData = new FormData(this);
191    sendForm('/send_form_event.php', this, formData);
192
193    // // Если токен уже есть – отправляем сразу
194    // if (window.captchaToken) {
195    //   console.log('Токен уже есть, отправляем сразу');
196    //   sendFormWithCaptcha(this, window.captchaToken);
197    //   return;
198    // }
199    //
200    // // Иначе сохраняем форму и запускаем каптчу
201    // console.log('Токена нет, выполняем каптчу');
202    // window.pendingForm = this;
203    //
204    // if (typeof window.smartCaptcha !== 'undefined' && widgetId !== undefined) {
205    //   window.smartCaptcha.execute(widgetId);
206    //   console.log('Каптча выполнена для .event_register_form, ожидаем токен');
207    // } else {
208    //   alert('Сервис каптчи недоступен. Попробуйте позже.');
209    //   window.pendingForm = null;
210    // }
211  });
212
213  // ---------- Подписка ----------
214  $("body").on("submit", "#subscribe__form", function (e) {
215    e.preventDefault();
216    if ($(this).data('submitting')) return false;
217    if (!$('#subscribe_policycheckbox').is(":checked")) return false;
218    $(this).data('submitting', true);
219    var formData = $(this).serialize();
220    $("#subscribe__form").slideUp();
221    $("#subscribe__form").after('<p style="font-size: 2rem; color: #fff;">Спасибо за подписку!</p>');
222    $.ajax({
223      type: "POST",
224      url: "/send_form_2.php",
225      data: formData,
226      success: function (msg) {
227        console.log("OK");
228
229        let yandex_target_id = $(form).find('.yandex_target_id');
230        if (yandex_target_id) {
231          ym(45135768, 'reachGoal', yandex_target_id);
232        }
233
234        var email = $("#subscribe__form input[name='EMAIL']").val();
235        var name = $("#subscribe__form input[name='NAME']").val();
236        mindbox("async", {
237          operation: "Website.SubscribeMain",
238          data: { customer: { email: email, firstName: name } },
239          onSuccess: function() { console.log("Mindbox: данные успешно отправлены"); },
240          onError: function(error) { console.log("Mindbox ошибка:", error); }
241        });
242      },
243      error: function (msg2) {
244        console.log(msg2);
245        $("#subscribe__form").data('submitting', false);
246      },
247      timeout: 10000,
248      complete: function() {
249        $("#subscribe__form").data('submitting', false);
250      }
251    });
252  });
253
254  // ---------- Подписка для инвесторов ----------
255  $("body").on("submit", "#investors_subscribe_form", function (e) {
256    e.preventDefault();
257    var formData = $(this).serialize();
258    $("#investors_subscribe_form").slideUp();
259    $("#investors_subscribe_form").after('<p style="font-size: 2rem; color: #fff;">Спасибо за то, что подписались на наши новости!<br /><br /><br /></p>');
260    $.ajax({
261      type: "POST",
262      url: "/send_form_2.php",
263      data: formData,
264      success: function (msg) {
265        let yandex_target_id = $(form).find('.yandex_target_id');
266        if (yandex_target_id) {
267          ym(45135768, 'reachGoal', yandex_target_id);
268        }
269        console.log("OK");
270      },
271      error: function (msg2) { console.log(msg2); },
272      timeout: 10000
273    });
274  });
275
276  // ---------- Форма "Свяжитесь со мной" (с каптчей) ----------
277  $("body").on("submit", ".send_feedback_form", function (e) {
278    e.preventDefault();
279    console.log('Отправка .send_feedback_form');
280
281    var $checkbox = $(this).find('#policycheckbox');
282    if (!$checkbox.is(":checked")) {
283      $checkbox.addClass("must_sign");
284      console.log('Чекбокс не отмечен');
285      return false;
286    }
287
288    if (window.captchaToken) {
289      console.log('Токен уже есть, отправляем сразу');
290      sendFormWithCaptcha(this, window.captchaToken);
291      return;
292    }
293
294    console.log('Токена нет, выполняем каптчу');
295    window.pendingForm = this;
296
297    if (typeof window.smartCaptcha !== 'undefined' && widgetId !== undefined) {
298      window.smartCaptcha.execute(widgetId);
299      console.log('Каптча выполнена для .send_feedback_form, ожидаем токен');
300    } else {
301      alert('Сервис каптчи недоступен. Попробуйте позже.');
302      window.pendingForm = null;
303    }
304  });
305
306  // ---------- Форма Отдела Контроля Качества (с каптчей) ----------
307  $("body").on("submit", "#qualityDepartmentFeedbackForm", function (e) {
308    e.preventDefault();
309    console.log('Отправка #qualityDepartmentFeedbackForm');
310
311    var $checkbox = $(this).find('#qualityDepartmentFeedbackPolicycheckbox');
312    if (!$checkbox.is(":checked")) {
313      console.log("Чекбокс не отмечен");
314      return false;
315    }
316
317    if (window.captchaToken) {
318      console.log('Токен уже есть, отправляем сразу');
319      sendFormWithCaptcha(this, window.captchaToken);
320      return;
321    }
322
323    console.log('Токена нет, выполняем каптчу');
324    window.pendingForm = this;
325
326    if (typeof window.smartCaptcha !== 'undefined' && widgetId !== undefined) {
327      window.smartCaptcha.execute(widgetId);
328      console.log('Каптча выполнена для #qualityDepartmentFeedbackForm, ожидаем токен');
329    } else {
330      alert('Сервис каптчи недоступен. Попробуйте позже.');
331      window.pendingForm = null;
332    }
333  });
334
335  // ---------- Анкета IT-школы (без каптчи) ----------
336  $("body").on("submit", "#it_school_feedback_form", function (e) {
337    e.preventDefault();
338    var formData = $(this).serialize();
339    $("#it_school_feedback_form").slideUp();
340    $.ajax({
341      type: "POST",
342      url: "/it-school",
343      data: formData,
344      success: function (msg) {
345        $("#it_school_feedback_form").after('<p style="font-size: 2rem; color: #5d5b5b; padding-left: 4rem;">Анкета отправлена!</p>');
346        let yandex_target_id = $(form).find('.yandex_target_id');
347        if (yandex_target_id) {
348          ym(45135768, 'reachGoal', yandex_target_id);
349        }
350        console.log("OK");
351      },
352      error: function (msg2) {
353        $("#it_school_feedback_form").after('<p style="font-size: 2rem; color: #5d5b5b; padding-left: 4rem;">Ошибка при отправке анкеты!</p>');
354        console.log(msg2);
355      },
356      timeout: 10000
357    });
358  });
359
360}); // конец $(document).ready()

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.