Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/424.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript onBlur事件防止onClick事件_Javascript_Onblur_Onfocus - Fatal编程技术网

Javascript onBlur事件防止onClick事件

Javascript onBlur事件防止onClick事件,javascript,onblur,onfocus,Javascript,Onblur,Onfocus,我有一个带有onfocus和onblur事件的输入文本框。 文本框下是一个div,它由隐藏,显示为:none 如果文本框聚焦,则应显示div;如果模糊,则应隐藏div。这似乎奏效了。现在我想让div保持可见,或者在单击div(或其内容之一)时单击div。这不管用。onBlur事件阻止div上的任何事件。 我已经尝试确定单击了哪个新元素,但找不到任何有助于我的属性。relatedTarget为空。此时,唯一的解决方案似乎是在div及其子节点之外的每个其他节点上添加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消失。