Вы можете использовать логическое значение var, чтобы проверить, наведен ли пользователь на вашу подсказку, а затем на onblur, а не на мышь. Если вы скрываете подсказку.
Что-то вроде этого в вашей петле:
var inputs = document.getElementsByTagName("input");
for (var i=0; i<inputs.length; i++){
(function(i) {
// Let the code cleaner :)
var span = inputs[i].nextElementSibling;
span.onmouseover = function() { this.isOver = true; }
span.onmouseout = function() { this.isOver = false; if(!inputs[i].isFocus) inputs[i].onblur(); }
// the span exists! on focus, show the hint
inputs[i].onfocus = function () {
this.isFocus = true;
span.style.display = "inline";
}
// when the cursor moves away from the field, hide the hint
inputs[i].onblur = function () {
this.isFocus = false;
if(!span.isOver) span.style.display = "none";
}
})(i);
}
Я поместил самозапускающуюся функцию только для того, чтобы сохранить область действия var i
, у вас нет проблем с функцией mmoutout.
РЕДАКТИРОВАТЬ: Обновлен пример
Ваш код для получения следующего диапазона не будет работать, поэтому я перешел на nextElementSibling, потому что пример, который вы поместили в jsfiddler .