Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Менять (установить) маску в "Input" по условию (https://javascript.ru/forum/dom-window/83026-menyat-ustanovit-masku-v-input-po-usloviyu.html)

romzes5 29.08.2021 19:55

Менять (установить) маску в "Input" по условию
 
Здравствуйте! Помогите пожалуйста с установкой маски по условию. В зависимости от выбранного пункта "Select" маска либо нужна, либо не нужна. У меня если маска сработала ("00-00 000000" только цифры), то она уже не сбрасывается. Подскажите пожалуйста, как это реализовать. Заранее вас благодарю!
Мой код:
<script>
let select = document.querySelector('#select_vid_doc1')
if (select) {
let val = select.value
select.addEventListener('change', function() {
val = this.value
console.log(val)

$(document).ready(function() {
var element = document.getElementById("seria1");

if (element != null) {
if (val == 1) { varmaskOptions = { mask:"000000000000"};
var mask = new IMask(element, maskOptions);
}
if (val != 1) {
var maskOptions = { mask:"*******************"};
var mask = new IMask(element, maskOptions);
}}
})
})
}
</script>

рони 29.08.2021 20:01

romzes5,
Пожалуйста, отформатируйте свой код!

Для этого его можно заключить в специальные теги: js/css/html и т.п., например:
[html run]
... минимальный код страницы с вашей проблемой
[/html]

О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.

рони 29.08.2021 20:05

Цитата:

Сообщение от romzes5
У меня если маска сработала ("00-00 000000" только цифры), то она уже не сбрасывается.

читать документацию на плагин, искать destroy()

voraa 29.08.2021 20:05

Зачем вот это внутри другой функции?
$(document).ready(function() {

Что вы этим хотели сделать?

romzes5 30.08.2021 08:30

Спасибо за ответ. В документации написано "mask.destroy()", куда бы не вставил, не работает. Можно Вас попросить поподробнее объяснить, как это сделать в моем коде.

romzes5 30.08.2021 08:44

Спасибо за ответ. Этот код писали ранее. Я начинаю разбираться только. Не могу Вам ответить на этот вопрос.

рони 30.08.2021 09:05

Цитата:

Сообщение от romzes5
В документации написано "mask.destroy()",

Цитата:

Сообщение от romzes5
varmask = newIMask(element, maskOptions);

:-? у вас переменная по другому названа, значит будет
//...
if(varmask) varmask.destroy();
varmask = newIMask(element, maskOptions);
//...

voraa 30.08.2021 09:23

рони,
Причем тут все эти описки.
Вот как по идеи должен был выглядеть этот кусок кода.
<script>
let select = document.querySelector('#select_vid_doc1')
if (select) {
	let val = select.value
	select.addEventListener('change', function() {
		val = this.value
		console.log(val)
		 
		$(document).ready(function() {
			var element = document.getElementById("seria1");  // A
			 
			if (element != null) {
				if (val == 1) { 
					var maskOptions = { mask:"000000000000"};
					var mask = new IMask(element, maskOptions);
				}
				if (val != 1) {
					var maskOptions = { mask:"*******************"};
					var mask = new IMask(element, maskOptions);
				}
			}                       // Б
		})
	})
}
</script>


Вопрос на засыпку - Когда и сколько раз будут выполняться строки А-Б ?

рони 30.08.2021 09:42

voraa,
ready внутри if ... странная конструкция.
возможно так ...
document.addEventListener("DOMContentLoaded", function() {
            let select = document.querySelector('#select_vid_doc1');
            let element = document.getElementById("seria1");
            let maskOptions = {
                mask: "000000000000"
            };
            let mask;
            if (select && element) {
                select.addEventListener('change', function() {
                    let val = this.value;
                    if (val == 1) mask = new IMask(element, maskOptions);
                    else if (mask) mask.destroy();
                })
            }
        });

voraa 30.08.2021 09:58

рони,
На самом деле я не совсем прав.
Хотя конструкция странная (мне больше показалось странным ready внутри обработчика 'change'.
Это действительно странно, но как ни странно работать должно.
Я не большой знаток jquery. просто сейчас внимательнее посмотрел документацию

$(document).ready(fun1)

не совсем тоже самое, что

document.addEventListener("DOMContentLoaded", fun2)

fun2 сработает только 1 раз, когда DOM построится.

fun1 каждый раз, когда документ DOM построен. Т.е сначала проверяется, если DOM уже построен, то fun1 тут же выполняется, а если не построен, то назначается обработчик


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