Есть три возможных проблемы с вашим кодом.
1) Элемент form-group
не был закрыт, поэтому ваш браузер, возможно, неправильно интерпретировал код, испортив его структуру.
2) Когда страница загружается, никакие события не сработали; поэтому по умолчанию ваш message
div будет виден. Когда вы фокусируете на password
, а затем не фокусируете его, message
исчезает. Чтобы это исправить, добавьте style="display: none;"
к вашему message
div.
3) Самое главное, ваш скрипт должен выполняться ПОСЛЕ загрузки документа. Вы можете легко сделать это, поместив весь ваш скрипт в функцию document.ready JQuery:
$(function(){
//Do everything here. This function will only execute after the document is ready.
}
Или, как я сделал, просто поместите свой тег script
в ДНО страницы. Таким образом, ваш скрипт будет загружен после загрузки остальной части страницы.
Причина этого проста. Когда ваш браузер загружает страницу, он загружает каждый элемент один за другим, больше или меньше. Скрипты выполняются, как только они загружены. Так что, если ваш скрипт запускается до загрузки остальной части HTML, ничего не произойдет.
<div class="form-group">
<div class="input-group-prepend">
<span class="input-group-text">
<i class="fa fa-key"></i>
</span>
<input required type="password" class="form-control" placeholder="Password" name="password" id="password">
</div>
<div id="message" style="display: none;">
<p id="letter" class="invalid">A <b>lowercase</b> letter</p>
<p id="capital" class="invalid">A <b>capital (uppercase)</b> letter</p>
<p id="number" class="invalid">A <b>number</b></p>
<p id="length" class="invalid">Minimum <b>8 characters</b></p>
</div>
<script>
// this is my javascript code
var myInput = document.getElementById("password");
var letter = document.getElementById("letter");
var capital = document.getElementById("capital");
var number = document.getElementById("number");
var length = document.getElementById("length");
myInput.onfocus = function() {
document.getElementById("message").style.display = "block";
}
myInput.onblur = function() {
document.getElementById("message").style.display = "none";
}
</script>
</div>