首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当文本区域/输入模糊/失去焦点时仍然显示div

问当文本区域/输入模糊/失去焦点时仍然显示div
EN

Stack Overflow用户
提问于 2013-08-28 20:49:47
回答 2查看 2.5K关注 0票数 1

因此,我尝试使用onfocus和onblur隐藏/显示div元素:

代码语言:javascript
复制
<textarea onfocus="document.getElementById('divID1').style.display='block';" onblur="document.getElementById('divID1').style.display='none';"></textarea>
<div id="divID1">

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

这是整个代码:JSFIDDLE链接。

您可以看到不能选中复选框或选择文本。

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

抱歉,我刚接触过Javascript。

提前谢谢你,

菲利普

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-28 23:53:59

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

代码语言:javascript
复制
<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

代码语言: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/ (适用于火狐、Chrome、IE7-10、Safari和Opera)。或者,您也可以使用这个修改过的代码:http://jsfiddle.net/PfQfN/6/ (效果相同)。

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

票数 0
EN

Stack Overflow用户

发布于 2013-08-28 20:56:47

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

代码语言:javascript
复制
setTimeout(function(){
document.getElementById('divID2').style.display='none';
}, 100);

这是一个更新的小提琴。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18497914

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档