gpt4 book ai didi

javascript - 单击 div 内的复选框时调用 Div onblur 事件

转载 作者:行者123 更新时间:2023-11-30 13:42:30 24 4
gpt4 key购买 nike

我有一个弹出式 div,我想在用户点击 div 外部时隐藏它。在 div 中,我有一个复选框...

问题是,尝试单击复选框时会触发 div 的 onblur 事件。我将 cancelEventBubble 代码放在复选框的 onclick 上,但 onblur 在复选框 onclick 事件之前触发...

有什么想法或建议吗?这看起来很简单,但并不是那么简单...

问候,阿尔伯特

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>Untitled Page</title>
<style type="text/css">
.popup
{
display: none;
position: relative;
border: solid 1px black;
width: 100px;
left: 100px;
top: 100px;
}

.lookupButton
{
width: 15px;
height: 20px;
background-color: blue;
}

.lookup
{
border: solid 1px green;
}
</style>
<script language="javascript" type="text/javascript">
var popupVisible = false;

function cancelEventBubble(e) {
if (!e) var e = window.event;
e.cancelBubble = true;
if (e.stopPropagation) e.stopPropagation();
}

function showPopup(obj)
{
if (!popupVisible)
{
popupVisible = true;
document.getElementById("popup").style.display = "block";
document.getElementById("popup").focus();
}
else
{
popupVisible = false;
document.getElementById("popup").style.display = "";
}
}

function hidePopup()
{
popupVisible = false;
document.getElementById("popup").style.display = "";
}

function setTextValue(obj)
{
var combo = document.getElementById("cbo1");
if (combo.value.indexOf(obj.value) == -1)
{
combo.value += obj.value + "; ";
}
else
{
combo.value = combo.value.replace(obj.value + "; ", "");
}
}

</script>
</head>
<body>
<table><tr><td>
<input readonly="readonly" type="text" name="cbo1" id="cbo1" />
</td><td>
<div class="lookupButton" onclick="showPopup(this);"></div>
</td></tr></table>

<div id="popup" class="popup" onblur="hidePopup()">
<input id="chk0" type="checkbox" onclick="cancelEventBubble(event); setTextValue(this);" value="John" />John<br />
<input id="chk1" type="checkbox" onclick="cancelEventBubble(event); setTextValue(this);" value="Jack" />Jack<br />
<input id="chk2" type="checkbox" onclick="cancelEventBubble(event); setTextValue(this);" value="James" />James<br />
<input id="chk3" type="checkbox" onclick="cancelEventBubble(event); setTextValue(this);" value="Richard" />Richard<br />
<input id="chk4" type="checkbox" onclick="cancelEventBubble(event); setTextValue(this);" value="Tim" />Tim<br />
</div>
</body>
</html>

最佳答案

在现代浏览器上 onblur事件不会触发 div 元素,也可以处理 IE 问题的跨浏览器方法可能是使用 event delegation ,将点击事件处理程序绑定(bind)到文档,并在点击的元素不是复选框或 lookupButton 时隐藏弹出窗口,例如:

document.onclick = function (e) { 
e = e || window.event;
var element = e.target || e.srcElement;

if (element.tagName != "INPUT" && element.type != "checkbox" &&
element.className != "lookupButton") {
hidePopup();
}
};

用你的其余代码检查上面的例子here .

关于javascript - 单击 div 内的复选框时调用 Div onblur 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1507648/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com