通过设计,当输入获得焦点时,应该禁用菜单容器onblur事件,并且当输入失去焦点时(即当用户完成输入时)应该启用它。
function pauseHiding(hiderId) {
var hider = document.getElementById(hiderId);
hider.onblur = null;
}
function resumeHiding(hiderId, timeout) {
var hider = document.getElementById(hiderId);
hider.onblur = "setTimeout(function(){hideMenu(hiderId);}, timeout);";
hider.focus();
}
事实上,输入的onfocus事件正常触发,但紧接着就是onblur事件。此外,onfocus会删除菜单容器的onblur事件,但输入的onblur不会将其返回。 https://jsfiddle.net/2dxre6nz/4/
答案 0 :(得分:1)
在showMenu()
功能中,您必须删除focus()
使用
function showMenu(containerId) {
var el = document.getElementById(containerId);
var setVisible = function(element){
if (element.tagName == 'A') element.style.display = 'inline';
else
if (element.tagName != 'SCRIPT' && element.tagName != 'STYLE') element.style.display = 'block';
};
iterateChildren(el, setVisible);
//el.focus();
}
您在主div中设置了onclick="showMenu('userbody')"
,因此每次点击都会改变您的注意力