Установка минимальной длины во вводимом тексте дает повторяющееся предупреждающее сообщение

Я хочу, чтобы пользователь добавил минимум 10 символов в html text. Итак, для этого я установил проверку на onblur текстового поля. Ниже приведен HTML-код и его js-код.

HTML

<input type = "text" class = "form-control" id = "txtStoreSiteAsstMangrMob"  maxlength = "10" onblur = "checkLength(this)"  onkeypress = "return IsNumeric4(event);" ondrop = "return false;" onpaste = "return false;" />

JAVASCRIPT

function checkLength(el) {    
if (el.value.length != 10) {
    alert("Minimum 10 numbers are accepted");        
}  }

Проблема здесь в том, что проверка выполняется правильно, но сообщение отображается повторно, даже после нажатия кнопки «ОК».

Так почему это происходит именно так? Пожалуйста помоги

оно работает. codepen.io/jacobgoh101/pen/QromYV?editors=1111. так это вызвано тем, что вы нам не показали

Jacob Goh 22.05.2018 11:15

@JacobGoh: Я все показал, работает даже на моей стороне. Но тревога срабатывает постоянно ..

hud 22.05.2018 11:20

@BramVanroy: Конечно, буду иметь это в виду на будущее

hud 22.05.2018 11:20

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

Harsh Jaswal 22.05.2018 11:35

@HarshJaswal: Я попробую еще раз и проверю

hud 22.05.2018 11:36

А также условие внутри оператора if должно быть похоже на el.value.length < 10, а не на el.value.length != 10.

Harsh Jaswal 22.05.2018 11:38

@HarshJaswal: вы можете сказать мне, как мне сосредоточиться после предупреждения в моем коде?

hud 22.05.2018 11:54

@JacobGoh: Думаю, установка фокуса после предупреждения вызывает проблему .. вот что я написал для фокуса el.focus();

hud 22.05.2018 11:56

Попробуй один раз без фокуса

Harsh Jaswal 22.05.2018 12:01

да, без фокуса он работает отлично .. Итак, что мне теперь делать?

hud 22.05.2018 12:05

Позвольте нам продолжить обсуждение в чате.

Harsh Jaswal 22.05.2018 12:08
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
11
578
5

Ответы 5

вы используете el.value.length != 10, это означает, что если длина больше 10, то сообщение будет отображаться, если меньше 10, то также будет отображаться сообщение.

В вашем коде, если вход имеет ровно длину 10 сообщений, сообщение не будет отображаться.

Но вы хотите проверить, если длина <10, затем показать сообщение, а если больше 10, то ничего не показывать.

Так что думаю лучше использовать:

el.value.length < 10

function checkLength(el) {
  if (el.value.length != 10) {
    alert("Minimum 10 numbers are accepted");
  }
}
<html>

<body>
  <input type = "text" class = "form-control" id = "txtStoreSiteAsstMangrMob" maxlength = "10" onblur = "checkLength(this)" onkeypress = "return IsNumeric4(event);" ondrop = "return false;" onpaste = "return false;" />
</body>

</html>

у меня ваш код работает нормально .. пожалуйста, проверьте еще раз .. Насколько я понимаю, если мы используем проверки полей ввода с помощью функции onBlur, фокус может доставить вам проблемы с этим типом проблем ..

Использование обработчика событий onblur на нескольких входах может привести к одному и тому же результату, результат может отличаться от браузера к браузеру.

Вариант 1. Избегайте использования js alert () с onblur.

Вариант 2. Поместите базовые проверки в отправку формы вместо размытия ввода.

Using onblur event handler on more than one inputs, can result the same thing. Я просто показываю вам, что этот пункт неверен
Jacob Goh 22.05.2018 11:46

вот способ заставить его работать, когда вы хотите постоянно его перефокусировать

демо https://codepen.io/jacobgoh101/pen/PeLaRw?editors=1011

сохранить состояние в атрибуте данных элемента, например, data-should-alert, установите для него значение false после одного предупреждения, чтобы функция могла решить, где или не выдавать предупреждение снова. снова установите для него значение true, как только пользователь начнет что-то вводить.

function checkLength(el) {
  if (el.getAttribute('data-should-alert')==='false') return;
  if (el.value.length != 10) {
    alert("Minimum 10 numbers are accepted");
    el.setAttribute('data-should-alert', 'false');
    el.focus();
  } 
}

function handleKeydown(el) {
    el.setAttribute('data-should-alert', 'true');
}

@BNN в этом случае глобальная переменная не подходит. состояние может храниться внутри атрибута данных каждого элемента. ответ обновлен

Jacob Goh 22.05.2018 12:21

На самом деле это удивительно, потому что alert является синхронным, поэтому скрипт ждет, пока диалоговое окно с предупреждением не будет закрыто, чтобы продолжить. Таким образом, в этом случае el.focus() должен работать только после того, как пользователь нажмет кнопку ОК в окне предупреждения.

Harsh Jaswal 22.05.2018 12:29

@HarshJaswal Я думаю, что это все еще синхронно. Но что-то заставляет ввод размываться сразу после фокусировки. Интересно, что это могло быть

Jacob Goh 22.05.2018 12:45

Он ведет себя как recursion, который превратился в бесконечный цикл. фокус ... размытие ... фокус ... размытие и так далее ....

Harsh Jaswal 22.05.2018 12:47

Попробуйте ниже демо скрипта, и оно очистит ваше требование:

HTML:

 <input type='text' id='text'/>

JS:

function textLength(value){
  var maxLength = 10;
  if (value.length > maxLength) return false;
  return true;
}

document.getElementById('text').onkeyup = function(){
 if (!textLength(this.value)) alert('text is too long!');
}

Установка минимальной длины во вводимом тексте дает повторяющееся предупреждающее сообщение

Я нашел здесь:

Подсчет входных символов - использовать onkeyup или onkeydown?

Другие вопросы по теме