Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.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事件添加到selectbox div only实体模型_Javascript_Dom - Fatal编程技术网

Javascript 将onblur事件添加到selectbox div only实体模型

Javascript 将onblur事件添加到selectbox div only实体模型,javascript,dom,Javascript,Dom,我似乎不太明白为什么要在cssdivonly选择框中添加onblur事件 我的包装器div的正常onblur方法不起作用: <!DOCTYPE html> <html> <head> <style type="text/css"> #container { width: 200px; float: left; font-family: Arial; font-size: 10pt; position:r

我似乎不太明白为什么要在cssdivonly选择框中添加onblur事件

我的包装器div的正常onblur方法不起作用:

<!DOCTYPE html>

<html>

<head>

<style type="text/css">
#container {
    width: 200px;
    float: left;
    font-family: Arial;
    font-size: 10pt;
    position:relative;
}
#one {
    height: 200px;
    border: 1px solid red;
    display: none;
    position:absolute;
    background: #C0C0C0;
}
#two {
    width: 8px;
    height: 8px;
    float: left;
    position:absolute;
}

#commentsbox, ul {
    list-style: none;
    margin: 0;
    cursor: default;
    width:194px;
    padding:6px;
}
#commentsbox, ul, li {
    padding: 2px;
}
#commentsbox li:hover{
    background: blue;
    color: #fff;
}
#result {
    border: 1px solid #000;
    width: 206px;
}
</style>

<script type="text/javascript">
 function showcommentsbox(){
   document.getElementById("one").style.display="block";
 }
 function hidecommentsbox(){
   document.getElementById("one").style.display="none";
 }

// pick a name that's useful to you:
function textToTextArea (e) {

    e = e ? e : event;
    var text = e.target ? e.target : e.srcElement;

    document.getElementById('result').innerHTML = text.innerText
}



</script>

</head>

<body>

<div id="container">
    <div id="one" onclick="hidecommentsbox()">
        <ul onclick="textToTextArea(event)" id="commentsbox" onblur="hidecommentsbox()">
          <li>Item 1</li>
          <li>Item 2</li>
        </ul>
    </div>
</div>

<div id="two"><img src="images/arrow_double.png" onclick="showcommentsbox()"></div>
<br>
<textarea id="result"></textarea>
</body>

</html>

#容器{
宽度:200px;
浮动:左;
字体系列:Arial;
字号:10pt;
位置:相对位置;
}
#一个{
高度:200px;
边框:1px纯红;
显示:无;
位置:绝对位置;
背景:#C0C0;
}
#两个{
宽度:8px;
高度:8px;
浮动:左;
位置:绝对位置;
}
#评论箱,ul{
列表样式:无;
保证金:0;
游标:默认值;
宽度:194px;
填充:6px;
}
#评论箱,ul,li{
填充:2px;
}
#评论框李:悬停{
背景:蓝色;
颜色:#fff;
}
#结果{
边框:1px实心#000;
宽度:206px;
}
函数showcommentsbox(){
document.getElementById(“一”).style.display=“块”;
}
函数hidecommentsbox(){
document.getElementById(“一”).style.display=“无”;
}
//选择一个对您有用的名称:
功能textToTextArea(e){
e=e?e:事件;
var text=e.target?e.target:e.src元素;
document.getElementById('result').innerHTML=text.innerText
}
  • 项目1
  • 项目2

我会尝试在评论中使用我的“单击外部”想法,尽管我通常在jquery中执行这些操作

<!--Basically, detect any click that is NOT on your ul and hide the comment box-->
<body onclick="hidecommentsbox()">

<div id="container">
    <div id="one" onclick="hidecommentsbox()">
        <ul onclick="textToTextArea(event)" id="commentsbox">
          <li>Item 1</li>
          <li>Item 2</li>
        </ul>
    </div>
</div>

function textToTextArea (e) {

    // Add this line to prevent event bubbling.
    // Normally, events "bubble" up the dom so clicking
    // the ul will ALSO trigger the click event on the "body".
    // This prevents that so that clicks to this element
    // trigger this function, while clicks on anything else
    // hide the comment box.
    e.stopPropagation();

    e = e ? e : event;
    var text = e.target ? e.target : e.srcElement;

    document.getElementById('result').innerHTML = text.innerText
}

您可以创建一个模糊事件吗?非常肯定(至少在某些浏览器中)模糊事件不会在每种元素类型上都起作用。模糊主要用于可以接收焦点的元素(输入、按钮等)。我认为div、ul等上的模糊(充其量)是参差不齐的。不幸的是,我不知道最好的选择是什么。可能是“单击外部”模式。我无法使用您的代码打开弹出选择框。它永远保持关闭状态……实际上,它打开和重新关闭的速度比你想象的要快。这意味着事件仍在冒泡。我想我终于明白你的代码应该做什么了。我将相应地编辑答案。
<!--Basically, detect any click that is NOT on your ul and hide the comment box-->
<body onclick="hidecommentsbox()">

    <div id="container">
        <div id="one" onclick="hidecommentsbox()">
            <ul onclick="textToTextArea(event)" id="commentsbox">
              <li>Item 1</li>
              <li>Item 2</li>
            </ul>
        </div>
    </div>

    <!--I misunderstood what was triggering the comment box. This is the click you need
    to prevent propagation on-->
    <div id="two"><img src="images/arrow_double.png" onclick="showcommentsbox(event)"></div>
    <br>
    <textarea id="result"></textarea>
</body>

function textToTextArea (e) {

    e = e ? e : event;
    var text = e.target ? e.target : e.srcElement;

    document.getElementById('result').innerHTML = text.innerText
}

function showcommentsbox(e){
    e.stopPropagation();
    document.getElementById("one").style.display="block";
}