所以我尝试使用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。
您可以看到无法选中复选框或选择文本。
当我点击div时,如果textarea失去焦点或使textarea仍然具有焦点,我还能做什么才能显示div元素?
抱歉,我是Javascript的新手。
提前致谢,
菲利普
答案 0 :(得分:0)
通过在模糊操作上添加非常短的延迟(setTimeout),复选框可以正常工作。 例如:
setTimeout(function(){
document.getElementById('divID2').style.display='none';
}, 100);
答案 1 :(得分:0)
这个问题并非无足轻重,但根据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/