当textarea/input onblr/失去焦点时,仍然显示div



所以我尝试使用onfocus和onblr:隐藏/显示div元素

<textarea onfocus="document.getElementById('divID1').style.display='block';" onblur="document.getElementById('divID1').style.display='none';"></textarea>
<div id="divID1">

这很好,但问题是,当textarea/input不再有焦点时,div会再次隐藏。

这是整个代码:JSFIDDLE链接
您可以看到,您无法选中复选框或选择文本。

当文本区域失去焦点时,我可以做些什么来仍然显示div元素,或者当我单击div时,使文本区域仍然具有焦点?

抱歉,我是Javascript的新手。

提前感谢,
Philipp

这个问题并不琐碎,但根据这个答案,可以通过以下方式解决:

HTML

<textarea id="example1" onfocus="focushandler('divID1');"></textarea>
<br />
<textarea id="example2" onfocus="focushandler('divID2');"></textarea>
<br />
<div id="divID1">
    <p>This div is blue</p>
    <br />
    <input type="checkbox" />Checkbox A
</div>
<div id="divID2">
    <p>This div is green</p>
    <br />
    <input type="checkbox" />Checkbox B
</div>

Javascript

var current = null; //currently shown div - divID1 or divID2
function focushandler(id) {
    if (current !== null) {
        current.style.display = 'none';
    }
    var div = document.getElementById(id);
    div.style.display = 'block';
    current = div;
}
function clickhandler(e) {
    if (current == null) { //if both divs are hidden
        return;
    }
    e = e || window.event; //for IE8,7 compatibility
    var t = e.target || e.srcElement; // clicked element
    var sig = false;
    // now check all parents
    while (t) {
        if (t === current || t.nodeName == 'TEXTAREA') {
            sig = true;
        }
        t = t.parentNode;
    }
    if (sig) {
        return;
    }
    current.style.display = 'none';
    current = null;
}
if (document.documentElement.addEventListener) {
    document.documentElement.addEventListener('click', clickhandler, false);
} else if (document.documentElement.attachEvent) { // for IE8-7 compatibility
    document.documentElement.attachEvent('onclick', clickhandler);
}

JSFiddle:http://jsfiddle.net/PfQfN/4/(适用于Firefox、Chrome、IE7-10、Safari和Opera)。或者,您也可以使用经过一点修改的代码:http://jsfiddle.net/PfQfN/6/(效果相同)。

更新的CSS:根据这个非常有用的答案,这些元素可以更好地定位,如图所示:http://jsfiddle.net/PfQfN/9/

通过在模糊操作上添加一个非常短的延迟(setTimeout),复选框可以工作。例如:

setTimeout(function(){
document.getElementById('divID2').style.display='none';
}, 100);

这是一个更新的jsfiddle。

最新更新