Не передается событие в функцию
НЕ срабатывает событие input для функции redId, работает только
если повторно нажать на button let btns = document.querySelector('.btns__student__and__teacher'); let btn = document.querySelectorAll('button'); let idF1 = document.getElementById('id__f1'); document.getElementById('student').classList.add('active'); btns.addEventListener('click', start); idF1.addEventListener('input', e => redId); /*НЕ срабатывает событие input для функции redId, работает только если повторно нажать на button*/ object = { student: { placeholder: `ID #0000`, length_size: 4 }, teacher: { placeholder: `ID #000000`, length_size: 6 } } function start(e) { if (e.target.classList.contains('btn')) { for (i = 0; i < btn.length; i++) { btn[i].classList.remove('active'); } e.target.classList.add('active'); placeholder(e.target.id) redId(idF1, e.target.id) console.log(e); } } function placeholder(key) { idF1.placeholder = object[key].placeholder; } function redId(el, key, e) { if (el.value.length < object[key].length_size) { el.classList.add('red') } else { el.classList.remove('red') } } |
А о HTML мы как догадываться будем?
idF1.addEventListener('input', e => redId); Это вы так функцию redId вызываете? |
Вот все... Нееет, это я передумаю в функцию событие(пытаюсь передать)
<!DOCTYPE html> <html lang="ru"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="css/style.css"> <title>Добавление</title> </head> <body> <div class="container"> <div class="reg"> <h1>Добавить в базу данных</h1> <div class="btns__student__and__teacher"> <div class="form-input"> <button class="btn" id="student">Студент</button> </div> <div class="form-input"> <button class="btn" id="teacher">Преподаватель</button> </div> </div> <div class="full__name"> <div class="form-input"> <label for="surname">Фамилия</label> <input id="surname" type="text"> </div> <div class="form-input"> <label for="name">Имя</label> <input id="name" type="text"> </div> <div class="form-input"> <label for="middle__name">Отчество</label> <input id="middle__name" type="text"> </div> </div> <div class="id"> <div class="form-input"> <label for="id__f1">ID</label> <input id="id__f1" type="text" placeholder="ID #0000"> </div> <div class="display__block__student"> <div class="form-input"> <label for="group">Группа</label> <select id="group"> <option>П-41</option> <option>П-11</option> <option>ИС-31</option> </select> </div> </div> </div> <div class="password__repeat__password"> <div class="form-input"> <label for="password">Пароль</label> <input id="password" type="password"> </div> <div class="form-input"> <label for="repeat__password">Повторить пароль</label> <input id="repeat__password" type="password"> </div> </div> <div class="add__user"> <div class="form-input"> <button id="add">Добавить</button> </div> </div> </div> </div> <script src="js/script.js"></script> </body> </html> * { margin: 0; padding: 0; box-sizing: border-box; } body { width: 100%; height: 100%; font-family: sans-serif; } .container { display: flex; justify-content: center; flex-direction: column; align-items: center; width: 900px; height: 600px; margin: 0 auto; position: absolute; top: calc(50% - 300px); left: 0; right: 0; } h1 { text-transform: uppercase; letter-spacing: 5px; font-size: 30px; color: #93969B; opacity: 0.8; padding: 0 0 20px 0; } .reg { width: 700px; padding: 20px 30px 20px 30px; text-align: center; border: 1px solid #93969B; } .reg .form-input { padding: 10px; font-size: 14px; letter-spacing: 2px; } .reg .form-input input, button, #group { width: 200px; padding: 10px; outline: none; } button { border: none; background-color: #007FFF; color: #fff; font-weight: bold; cursor: pointer; transition: 0.4s; } .reg .form-input button:hover { background: #2A52BE; letter-spacing: 2px; } .reg .btns__student__and__teacher, .display__block__student, .full__name, .id, .password__repeat__password { display: flex; justify-content: center; } .reg .btns__student__and__teacher { padding: 0 0 20px 0; } .reg .password__repeat__password { display: flex; flex-direction: column; align-items: center; } .reg .display__block__student { display: none; } .reg .form-input label { display: flex; justify-content: flex-start; padding: 0 0 4px 0; color: #93969B; } .add__user { padding: 20px 0 0 0; } .active { background: #2A52BE; } .red { border: 2px solid red; } ::-webkit-input-placeholder { /* WebKit browsers */ color: #93969B; } :-moz-placeholder { /* Mozilla Firefox 4 to 18 */ color: #93969B; } ::-moz-placeholder { /* Mozilla Firefox 19+ */ color: #93969B; } :-ms-input-placeholder { /* Internet Explorer 10+ */ color: #93969B; } |
А где js без передумывания и что сейчас не работает?
Показывать что то в placeholder - плохая практика. Вот видит пользователь ID #000000, начинает набирать, а подсказка то уже пропала. А он может и не обратил внимание, есть там пробел пред # или нет? И сколько там нулей было не посчитал заранее. Что бы все это увидеть ему придется стереть написанное. Лучше подсказку держать всегда над/сбоку от поля, если она так необходима А в поле иметь атрибут pattern и по нему проверять правильность ввода. Можно использовать псевдоклассы :invalid/:valid в CSS. Непонятно зачем надо вводить 'ID #' если они там должны быть всегда. Ну либо сразу сделать value = "ID #", либо пусть вводит только номер, а этот префикс добавлять программно, если он так необходим. |
Вот конкретно тут у меня не работает в этой функции событие "input"
idF1.addEventListener('input', el => redId);Я хочу чтобы при вводе недостаточного кол-во символов на 'ID' "border" был красный а при полном введении нужного кол-во символов красный "border" убирался function redId(el/*ID передаю*/, key, e) { if (el.value.length < object[key].length_size) { el.classList.add('red') } else { el.classList.remove('red') } } |
idF1.addEventListener('input', el => redId);
Еще раз спрашиваю, это вы так функцию redId вызываете? А как и какие параметры вы ей передаете? Чему в ней будет el, key, и e? Функции вызываются redId(какие то параметры) |
Часовой пояс GMT +3, время: 08:58. |