【问题标题】:Still show div when textarea/input onblur / loses focus当 textarea/input onblur / 失去焦点时仍然显示 div
【发布时间】:2013-08-28 20:49:47
【问题描述】:

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

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

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

这是完整的代码:JSFIDDLE link。
可以看到无法勾选 Checkbox 或选择文字。

如何在 textarea 失去焦点时仍然显示 div 元素,或者在我单击 div 时使 textarea 仍然具有焦点?

抱歉,我是 Javascript 新手。

提前致谢,
菲利普

【问题讨论】:

  • 我不明白,你想在模糊上隐藏它,但让它远离焦点??
  • 不,如果您在 div 或 textarea 之外单击,我想隐藏它。就像 textarea 和 div 一样。

标签: javascript html onblur onfocus


【解决方案1】:

这个问题不是小事,但根据this answer,可以通过以下方式解决:

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:根据this very useful answer,这些元素可以更好地定位,如下所示fiddle:http://jsfiddle.net/PfQfN/9/

【讨论】:

  • 谢谢,很高兴它有帮助! ;-)
【解决方案2】:

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

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

这是updated jsfiddle。

【讨论】:

  • 这很酷,但是有没有办法让 div 一直保持在那里,直到您点击 textarea 或 div 之外?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-06
  • 1970-01-01
  • 2012-04-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多