Javascript onBlur事件防止onClick事件
我有一个带有onfocus和onblur事件的输入文本框。 文本框下是一个div,它由隐藏,显示为:none 如果文本框聚焦,则应显示div;如果模糊,则应隐藏div。这似乎奏效了。现在我想让div保持可见,或者在单击div(或其内容之一)时单击div。这不管用。onBlur事件阻止div上的任何事件。 我已经尝试确定单击了哪个新元素,但找不到任何有助于我的属性。relatedTarget为空。此时,唯一的解决方案似乎是在div及其子节点之外的每个其他节点上添加onfocus 除了这个,你还有别的想法吗? 谢谢你的帮助Javascript onBlur事件防止onClick事件,javascript,onblur,onfocus,Javascript,Onblur,Onfocus,我有一个带有onfocus和onblur事件的输入文本框。 文本框下是一个div,它由隐藏,显示为:none 如果文本框聚焦,则应显示div;如果模糊,则应隐藏div。这似乎奏效了。现在我想让div保持可见,或者在单击div(或其内容之一)时单击div。这不管用。onBlur事件阻止div上的任何事件。 我已经尝试确定单击了哪个新元素,但找不到任何有助于我的属性。relatedTarget为空。此时,唯一的解决方案似乎是在div及其子节点之外的每个其他节点上添加onfocus 除了这个,你还有别
Jens当onblur运行时,它将隐藏div,因此当单击时,它不会对div触发,因为div是不可见的。因此:
// use the following global variable
var mytimer = null;
function newOnBlur()
{
mytimer = setTimeout(YourCurrentOnBlurFunctionWihoutParentheses,150);
}
// clearTimeout in the first line of your click function
function newOnClick()
{
clearTimeout(mytimer);
// rest of your click event
}
谢谢大家的回答。我会接受海军的建议。使用全局变量似乎有点难看,但这似乎是唯一的方法 对于那些有同样问题的人:在我的例子中,setTimeout有点迂腐。我必须以这种方式设置,否则永远不会使用超时:
var timer = null;
function timer_function(divname)
{
timer = setTimeout(function(){document.getElementById(divname).style.display='none'}, 200);
}
我必须重新关注文本框,若超时被清除,否则模糊功能将不再工作
感谢您的时间和帮助。:)
onmousedown
在onblur
div.addEventListener('mousedown', function(event) {
event.preventDefault();
event.stopPropagation();
});
请阅读,然后相应地编辑您的问题。(我猜,在您将div设置回显示之前的短时间超时:无,可能会有所帮助。如果在该时间跨度内发生div内的任何单击,则必须清除超时。)您可以做的是:单击事件时添加一个类名“active”并在on blur事件中添加if语句,检查div是否具有“活动”类,如果没有显示:无,如果是显示:块。如果你愿意,我可以分享一些code@Elnatanvazana谢谢你的回答。我不能这样做。我的onblur防止再次单击div。如果单击除div之外的其他位置,我希望div消失。