Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   как сделать маску телефона в input c +7(___) без jQuery (https://javascript.ru/forum/dom-window/63870-kak-sdelat-masku-telefona-v-input-c-7-___-bez-jquery.html)

рони 23.11.2017 10:11

Цитата:

Сообщение от Loki
рони,
Нет, таким образом не работает,

чудеса! :)

timlsf 06.10.2018 21:31

Добрый вечер, Рони!

Давно пользуюсь вариантом из поста #5 )) отличный вариант, я считаю, можно выделять весь номер и переписывать. Но не суть.

На сайте после загрузки страницы в поле номера подставляются данные из онлайн-консультанта.
В самой программе консультанта все номера меняются на формат без скобок и пробелов +79999999999, соответственно подставляются в таком же виде. Маска применяется только при фокусе на инпут.

Перебрал все эвентлистенерс, но ничего не помогло, подскажите как решить вопрос?)

рони 06.10.2018 21:49

timlsf,
не особо понял, в чём у вас проблема.
если программа меняет значение инпута, то вызовите фокус на инпуте после этой программы, либо по таймеру.

timlsf 06.10.2018 23:06

Да, проблема была в том, что при загрузке страницы я видел подставленный номер в формате 79999999999, маска применялась только при нажатии.

в стороннем скрипте добавил такое, возможно это было очевидно, но может кому пригодится:
..
var event = new Event("input");
input.dispatchEvent(event);
..


Все заработало. спасибо за подсказку

Вадим Вадимыч 30.09.2019 22:37

Доброго времени суток, подскажите как код можно вынести в отдельный файл js ? Который подключается <script src="/assets/components/---.js"></script>

Большое спасибо!

рони 30.09.2019 22:52

Вадим Вадимыч,
в чём проблема?

Вадим Вадимыч 30.09.2019 22:59

Рони
Рони, прошу прошения разобрался, сам виноват косяк вышел!

Скрипт просто бомба, маленький не то что всем известный плагин. Спасибо вам за вклад в развитие общего дела!

seroja 03.12.2019 13:46

Приветствую!
Хелп, нужно чтобы при вводе телефона, пробел не подставлялся
<form action="" method="post">
 <input placeholder="Telefono" name="phone" type="tel" class="wv_phone" required id="phone1">
    <button>go</button>
    </form>
    <script>
window.addEventListener("DOMContentLoaded", function() {
    [].forEach.call( document.querySelectorAll('.wv_phone'), function(input) {
    var keyCode;
    function mask(event) {
        event.keyCode && (keyCode = event.keyCode);
        var pos = this.selectionStart;
        if (pos < 3) event.preventDefault();
       var matrix = "+39 __________",
            i = 0,
            def = matrix.replace(/\D/g, ""),
            val = this.value.replace(/\D/g, ""),
            new_value = matrix.replace(/[_\d]/g, function(a) {
                return i < val.length ? val.charAt(i++) || def.charAt(i) : a
            });
        i = new_value.indexOf("_");

        if (i != -1) {
            i < 5 && (i = 3);
            new_value = new_value.slice(0, i)
        }
        var reg = matrix.substr(0, this.value.length).replace(/_+/g,
            function(a) {
                return "\\d{0," + a.length + "}"
            }).replace(/[+()]/g, "\\$&");
        reg = new RegExp("^" + reg + "$");
        if (!reg.test(this.value) || this.value.length < 5 || keyCode > 47 && keyCode < 58) this.value = new_value;
        if (event.type == "blur" && this.value.length < 5)  this.value = ""
    }

    input.addEventListener("input", mask, false);
    input.addEventListener("focus", mask, false);
    input.addEventListener("blur", mask, false);
    input.addEventListener("keydown", mask, false)

  });

});
  </script>

Убираю пробел в строке
var matrix = "+39__________",

скрипт перестает работать, не дает ничего ввести...

рони 03.12.2019 14:18

seroja,
строка 23, 5 заменить на 3

seroja 03.12.2019 14:41

Цитата:

Сообщение от рони (Сообщение 516685)
seroja,
строка 23, 5 заменить на 3

Спасибо тебе добрый человек!


Часовой пояс GMT +3, время: 15:43.