Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 24.09.2017, 19:53
Аватар для LADYX
Профессор
Отправить личное сообщение для LADYX Посмотреть профиль Найти все сообщения от LADYX
 
Регистрация: 19.02.2015
Сообщений: 217

рони,
Да, всё работает как нужно. Огромнейшее вам спасибо!!! И удачи!!!
Ответить с цитированием
  #12 (permalink)  
Старый 11.10.2017, 09:32
Аватар для LADYX
Профессор
Отправить личное сообщение для LADYX Посмотреть профиль Найти все сообщения от LADYX
 
Регистрация: 19.02.2015
Сообщений: 217

рони,
я вас приветствую!

Я здесь немного пошаманил со скриптом, и мне не получается только два момента. Помогите, пожалуйста, сделать так, чтобы невозможно было клавишами Delete и Backspace удалять семерку. И второй момент - когда номер уже полностью набран, то при вводе уже лишней цифры, она вводится и тут же удаляется. Спасибо вам!

window.addEventListener("DOMContentLoaded", function() {
function setCursorPosition(pos, elem) {
    elem.focus();
    if (elem.setSelectionRange) elem.setSelectionRange(pos, pos);
    else if (elem.createTextRange) {
        var range = elem.createTextRange();
        range.collapse(true);
        range.moveEnd("character", pos);
        range.moveStart("character", pos);
        range.select()
    }
}

var is_del = false;
var is_back = false;
function mask(event) {
    var curent_position = -1;
    if(event.type == "keyup"){
      curent_position = this.selectionStart;
    }
    var matrix = "+7 (___) ___ ____",
        i = 0,
        def = matrix.replace(/\D/g, ""),
        val = this.value.replace(/\D/g, "");
    if (def.length >= val.length) val = def;
    this.value = matrix.replace(/./g, function(a) {
        return /[_\d]/.test(a) && i <= val.length ? val.charAt(i++) : i < val.length ? a : i++ == 6 && val.length == 4 && event.keyCode !=8 && event.keyCode !='' ? ")" : ""
    });
    is_back = is_del = false;
    if(event.keyCode == 8) is_back = true;
    else if(event.keyCode == 46) is_del = true;
    if (event.type == "blur") {
        if (this.value.length == 2) this.value = "";
    } else if(curent_position != -1){
      if(is_del || is_back){
        setCursorPosition(curent_position, this);
      }
    } else if(event.type == "focus") setCursorPosition(this.value.length, this);
};
    var input = document.querySelector("#tel");
    input.addEventListener("focus", mask, false);
    input.addEventListener("blur", mask, false);
    input.addEventListener("keyup", mask, false);
});


<input type="text" id="tel">
Ответить с цитированием
  #13 (permalink)  
Старый 11.10.2017, 11:48
Аватар для LADYX
Профессор
Отправить личное сообщение для LADYX Посмотреть профиль Найти все сообщения от LADYX
 
Регистрация: 19.02.2015
Сообщений: 217

рони,
всё равно семерка удаляется. И сейчас стало так, что удаляя одну цифру, удаляется сразу две, и при этом курсор перескакивает.
Ответить с цитированием
  #14 (permalink)  
Старый 11.10.2017, 12:09
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

LADYX,
убрал код
Ответить с цитированием
  #15 (permalink)  
Старый 11.10.2017, 12:17
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

LADYX,
теструйте
<!DOCTYPE HTML>

<html>

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

<body>
    <input  value="" id="tel">   <input  value="" >  <input  value="">
    <script>
window.addEventListener("DOMContentLoaded", function() {
function setCursorPosition(pos, elem) {
    elem.focus();
    if (elem.setSelectionRange) elem.setSelectionRange(pos, pos);
    else if (elem.createTextRange) {
        var range = elem.createTextRange();
        range.collapse(true);
        range.moveEnd("character", pos);
        range.moveStart("character", pos);
        range.select()
    }
}
var len = 0;
function mask(event) {   
    var matrix = "+7 (___) ___ ____",
        i = 0,
        def = matrix.replace(/\D/g, ""),
        val = this.value.replace(/\D/g, "");
    if (def.length >= val.length) val = def;
    this.value = matrix.replace(/[_\d]/g, function(a) {
        return  i < val.length ? val.charAt(i++) :  a
    });
    i = this.value.indexOf("_");
    if(val.length < len) i = this.value.lastIndexOf(val.substr(-1))+1;
    if (i != -1) {
    i < 5 && (i = 3);
    this.value = this.value.slice(0,i);
    }
    if (event.type == "blur") {
        if (this.value.length < 5) this.value = ""
    } else setCursorPosition(this.value.length, this);
    len = val.length;
};
    var input = document.querySelector("#tel");
    input.addEventListener("input", mask, false);
    input.addEventListener("focus", mask, false);
    input.addEventListener("blur", mask, false);
});
  </script>
</body>

</html>

Последний раз редактировалось рони, 11.10.2017 в 13:08.
Ответить с цитированием
  #16 (permalink)  
Старый 11.10.2017, 12:20
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

Сообщение от LADYX
всё равно семерка удаляется.
это как?
Ответить с цитированием
  #17 (permalink)  
Старый 11.10.2017, 12:33
Аватар для LADYX
Профессор
Отправить личное сообщение для LADYX Посмотреть профиль Найти все сообщения от LADYX
 
Регистрация: 19.02.2015
Сообщений: 217

рони,
Сообщение от рони
это как?
семерку можно удалить клавишами Delete или Backspace. Вот это хотелось бы как-то запретить.
Ответить с цитированием
  #18 (permalink)  
Старый 11.10.2017, 13:07
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

Сообщение от LADYX
семерку можно удалить клавишами Delete или Backspace
не могу воспроизвести
Ответить с цитированием
  #19 (permalink)  
Старый 11.10.2017, 13:38
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,726

Сообщение от рони
не могу воспроизвести
У меня тоже не получилось.
Однако семерку можно заменить любой другой цифрой.
Достаточно нажать на поле, зажать клавишу с любой цифрой (чтобы поле заполнилось), нажать home и ввести любую другую цифру.
Ответить с цитированием
  #20 (permalink)  
Старый 11.10.2017, 13:51
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

Сообщение от Nexus
Однако семерку можно заменить любой другой цифрой.
хакер
Ответить с цитированием
Ответ


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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать скролл без возврата? Александр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