Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #41 (permalink)  
Старый 17.10.2017, 11:29
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Сообщение от Evgeny.Ponamorev
Зачем три input ?
для проверки blur
Ответить с цитированием
  #42 (permalink)  
Старый 22.11.2017, 16:06
Новичок на форуме
Отправить личное сообщение для Loki Посмотреть профиль Найти все сообщения от Loki
 
Регистрация: 22.11.2017
Сообщений: 6

Здравствуйте, Рони. Спасибо за классный скрипт. Не подскажете, как видоизменить данный скрипт, с учётом записи маски телефонного номера, на двух формах. Дело в том, что, маска телефона в input, работает только в одной форме поля телефон, если на странице находятся две формы, одна из них находится в подвале сайта, то данная маска уже не работает во второй форме поля телефон? Дублировать скрипт из-за var input = document.querySelector("#tel1"); и var input = document.querySelector("#tel2");? Извините за нубский вопрос, в javascript не особо силён
Ответить с цитированием
  #43 (permalink)  
Старый 22.11.2017, 16:23
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Loki,
class="tel" добавить полям ввода

<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
  <meta charset="utf-8">
</head>

<body>
    <input  value="" class="tel">
    <input  value="" class="tel">
    <input  value="" class="tel" >
    <script>
window.addEventListener("DOMContentLoaded", function() {
    [].forEach.call( document.querySelectorAll('.tel'), function(input) {
    var keyCode;
    function mask(event) {
        event.keyCode && (keyCode = event.keyCode);
        var pos = this.selectionStart;
        if (pos < 3) event.preventDefault();
        var matrix = "+7 (___) ___ ____",
            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{1," + 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>
</body>

</html>
Ответить с цитированием
  #44 (permalink)  
Старый 23.11.2017, 07:41
Новичок на форуме
Отправить личное сообщение для Loki Посмотреть профиль Найти все сообщения от Loki
 
Регистрация: 22.11.2017
Сообщений: 6

Спасибо, за решение Ронни. Пример рабочий. Но к сожалению применительно к моему сайту не подошёл, по данной схеме маски в input перестали работать сразу в двух формах телефонных полей. На сайте стоят формы на Ajax Form (cms Modx Revo), var input = document.querySelector("#tel"); оказался необходим в моём случае.

Решил проблему добавлением (дублем строк с 43- по 53) и как оказалось этот вариант оказался рабочим. Не знаю как на правильность и изящество решения, ибо упоминал, что не особо сильно разбираюсь в javascript. Ниже решение, хотелось бы узнать, Ваше мнение как гуру. Такой вариант решения правильный с точки зрения синтаксиса, или глупость полная? Хотя работает.

<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
  <meta charset="utf-8">
</head>

<body>

    <input  value="" id="af_tel1" placeholder="Телефон*">   
	<input  value="" id="af_tel2" placeholder="Телефон*">
	
<script>
  window.addEventListener("DOMContentLoaded", function() {
    var keyCode;

    function mask(event) {
        event.keyCode && (keyCode = event.keyCode);
        var pos = this.selectionStart;
        if (pos < 3) event.preventDefault();
        var matrix = "+7 (___) ___-__-__",
            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{1," + 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 = ""
    }
    var input = document.querySelector("#af_tel1");
    input.addEventListener("input", mask, false);
    input.addEventListener("focus", mask, false);
    input.addEventListener("blur", mask, false);
    input.addEventListener("keydown", mask, false)
	
	var input = document.querySelector("#af_tel2");
    input.addEventListener("input", mask, false);
    input.addEventListener("focus", mask, false);
    input.addEventListener("blur", mask, false);
    input.addEventListener("keydown", mask, false)
});
</script>

</body>

</html>

Последний раз редактировалось Loki, 23.11.2017 в 08:00.
Ответить с цитированием
  #45 (permalink)  
Старый 23.11.2017, 08:47
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Loki,
а добавить id и class было никак?
Ответить с цитированием
  #46 (permalink)  
Старый 23.11.2017, 09:09
Новичок на форуме
Отправить личное сообщение для Loki Посмотреть профиль Найти все сообщения от Loki
 
Регистрация: 22.11.2017
Сообщений: 6

Не понял Вас Ронни (проверка в двух input телефонных полей на сайте осуществляется по id="af_tel1" и id-"af_tel2"), но всё равно спасибо за скрипт
Ответить с цитированием
  #47 (permalink)  
Старый 23.11.2017, 09:26
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Loki,
<input  value="" class="tel" id="af_tel1">
 <input  value="" class="tel" id="af_tel2">

и скрипт из поста №43
Ответить с цитированием
  #48 (permalink)  
Старый 23.11.2017, 09:39
Новичок на форуме
Отправить личное сообщение для Loki Посмотреть профиль Найти все сообщения от Loki
 
Регистрация: 22.11.2017
Сообщений: 6

рони,
Нет, таким образом не работает, только что проверил на сайте, инпуты в двух телефонных полях не активируются вашим скриптом.
Ответить с цитированием
  #49 (permalink)  
Старый 23.11.2017, 09:42
Новичок на форуме
Отправить личное сообщение для Loki Посмотреть профиль Найти все сообщения от Loki
 
Регистрация: 22.11.2017
Сообщений: 6

var input = document.querySelector("#af_tel1"); и var input = document.querySelector("#af_tel2"); необходимы на сайте, в такой конструкции пост № 44, всё работает.
Ответить с цитированием
  #50 (permalink)  
Старый 23.11.2017, 09:53
Новичок на форуме
Отправить личное сообщение для Loki Посмотреть профиль Найти все сообщения от Loki
 
Регистрация: 22.11.2017
Сообщений: 6

Вообще, работоспособность нескольких форм на одной странице сайта, притча во языцех, на двух формах стоят гуглокаптчи - reCAPTCHA2, так вот до недавнего времени тоже наблюдалась проблема совместной работы, работала только одна, буквально 2 дня назад нашёл решение проблемы. Теперь работают обе.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать скролл без возврата? Александр141 Элементы интерфейса 3 24.08.2015 15:40
как сделать tooltip без jQuery CrossFire Элементы интерфейса 2 18.11.2013 02:29
Как сделать проверку input 5-7 символов lamer Общие вопросы Javascript 5 18.06.2012 22:10
Как сделать submit без самой кнопки submit shaltay jQuery 3 06.05.2011 15:36
Как сделать INPUT с красивым задним фоном? greatilya (X)HTML/CSS 15 26.11.2009 14:04