consultation form

common/consultation-form/consultation-form__new.htmcommon/our-works/our-works.htm
<button 
              class="button button--accent header__button js-open-popup-main-consult"
              data-title="Консультация по Алмазной резке в Москве">
              Получить консультацию
            </button>

 

<script>
 
document.querySelectorAll('.js-open-popup-main-consult').forEach(function(btn) {
 
    btn.addEventListener('click', function() {
 
        var popup = document.getElementById('main-consultation-popup');
 
        // берём из data-title
        var title =
            this.getAttribute('data-title') ||
            'Получить консультацию';
 
        document.getElementById('main-consultation-subject').value =
            title;
 
        document.getElementById('main-consultation-source').value =
            window.location.href;
 
        popup.style.display = 'flex';
 
    });
 
});
 
// закрытие по крестику
var worksPopup = document.getElementById(
    'main-consultation-popup'
);
 
var worksClose = document.getElementById(
    'main-consultation-close'
);
 
worksClose.addEventListener('click', function() {
 
    worksPopup.style.display = 'none';
 
});
 
// закрытие по клику на фон
worksPopup.addEventListener('click', function(e) {
 
    if (e.target === worksPopup) {
 
        worksPopup.style.display = 'none';
 
    }
 
});
 
</script>
            <button
              class="button button--simple our-works__button js-open-popup-work-consult"
              data-title="Консультация по работам">
 
               Получить консультацию
 
            </button>

 

<
<script>
 
document.querySelectorAll('.js-open-popup-work-consult').forEach(function(btn) {
 
    btn.addEventListener('click', function() {
 
        var popup = document.getElementById('works-consultation-popup');
 
        // берём из data-title
        var title =
            this.getAttribute('data-title') ||
            'Получить консультацию';
 
        document.getElementById('works-consultation-subject').value =
            title;
 
        document.getElementById('works-consultation-source').value =
            window.location.href;
 
        popup.style.display = 'flex';
 
    });
 
});
 
// закрытие по крестику
var worksPopup = document.getElementById(
    'works-consultation-popup'
);
 
var worksClose = document.getElementById(
    'works-consultation-close'
);
 
worksClose.addEventListener('click', function() {
 
    worksPopup.style.display = 'none';
 
});
 
// закрытие по клику на фон
worksPopup.addEventListener('click', function(e) {
 
    if (e.target === worksPopup) {
 
        worksPopup.style.display = 'none';
 
    }
 
});
 
</script>

 

<script>
document.addEventListener('DOMContentLoaded', function () {
 
    // Запускаем после того как app.js успеет отработать
    setTimeout(function () {
 
        document.querySelectorAll('.works-js-phone-mask').forEach(function (input) {
            var im = input.inputmask;
            if (!im) return;
 
            var opts = im.opts;
 
            // Замораживаем нужные опции — любые попытки перезаписи молча игнорируются
            ['clearIncomplete', 'clearMaskOnLostFocus'].forEach(function (key) {
                Object.defineProperty(opts, key, {
                    get: function () { return false; },
                    set: function () { /* заглушка — app.js думает что записал, но нет */ },
                    configurable: false,
                    enumerable: true
                });
            });
 
            function getErrorElement(input) {
 
    var existing =
        input.parentNode.querySelector(
            '.consultation-form__error'
        );
 
    if (existing) return existing;
 
    var error = document.createElement('div');
 
    error.className =
        'consultation-form__error';
 
    input.parentNode.appendChild(error);
 
    return error;
 
}
 
            // Вешаем свои обработчики поверх
            opts.onincomplete = function () {
 
    var error = getErrorElement(input);
 
    input.setCustomValidity(
        '📱 Введите номер телефона полностью'
    );
 
    error.textContent =
        '📱 Введите номер телефона полностью';
 
    error.classList.add('is-visible');
 
};
 
            opts.oncomplete = function () {
 
    var error = getErrorElement(input);
 
    input.setCustomValidity('');
 
    error.classList.remove('is-visible');
 
};
            opts.oncleared = function () {
 
    var error = getErrorElement(input);
 
    input.setCustomValidity('');
 
    error.classList.remove('is-visible');
 
};
        });
 
    }, 0); // setTimeout(0) — уходим в конец очереди текущего event loop
 
});
</script>
<script>
 
document.addEventListener('DOMContentLoaded', function () {
 
    // Запускаем после того как app.js успеет отработать
    setTimeout(function () {
 
        document.querySelectorAll('.works-js-phone-mask').forEach(function (input) {
            var im = input.inputmask;
            if (!im) return;
 
            var opts = im.opts;
 
            // Замораживаем нужные опции — любые попытки перезаписи молча игнорируются
            ['clearIncomplete', 'clearMaskOnLostFocus'].forEach(function (key) {
                Object.defineProperty(opts, key, {
                    get: function () { return false; },
                    set: function () { /* заглушка — app.js думает что записал, но нет */ },
                    configurable: false,
                    enumerable: true
                });
            });
 
            function getErrorElement(input) {
 
    var existing =
        input.parentNode.querySelector(
            '.consultation-form__error'
        );
 
    if (existing) return existing;
 
    var error = document.createElement('div');
 
    error.className =
        'consultation-form__error';
 
    input.parentNode.appendChild(error);
 
    return error;
 
}
 
            // Вешаем свои обработчики поверх
            opts.onincomplete = function () {
 
    var error = getErrorElement(input);
 
    input.setCustomValidity(
        '📱 Введите номер телефона полностью'
    );
 
    error.textContent =
        '📱 Введите номер телефона полностью';
 
    error.classList.add('is-visible');
 
};
 
            opts.oncomplete = function () {
 
    var error = getErrorElement(input);
 
    input.setCustomValidity('');
 
    error.classList.remove('is-visible');
 
};
            opts.oncleared = function () {
 
    var error = getErrorElement(input);
 
    input.setCustomValidity('');
 
    error.classList.remove('is-visible');
 
};
        });
 
    }, 0); // setTimeout(0) — уходим в конец очереди текущего event loop
 
});
 
</script>

 

2026Stable CORE