我有一个主div(父元素),里面有一个输入框(子元素)和2个其他可点击的div(子元素)。
我想要捕获主div的焦点事件 - 不是在点击或聚焦输入框或其他2个可点击的div时。我使用jQuery设置了一个事件处理程序来捕获所有元素的focusin
focusout
事件。
当我点击输入框时,我看到的是:
- 首先聚焦在输入框上
- 然后聚焦在主div上。
如果我点击其他可点击的div:
- 首先触发输入框的
focusout
事件 - 然后是主div和其他div获得焦点,主div获得
focusin
事件。
我不希望在点击其他可点击的div时主div失去焦点。
我该如何实现呢?我想在失去焦点时验证输入,但不想在点击其他div时验证。
目前为止,这就是我的代码:Fiddle
HTML:
<div id="main">
<input id="i" type="text" />
<div id="Div2" class="icons" style="background-color:blue; right: 25px;" onclick="log('Clear Clicked');"></div>
<div id="Div1" class="icons" style="background-color:red;" onclick="log('DD Clicked');"></div>
</div>
CSS :
* {
-webkit-box-sizing: border-box;
/* Safari/Chrome, other WebKit */
-moz-box-sizing: border-box;
/* Firefox, other Gecko */
box-sizing: border-box;
/* Opera/IE 8+ */
}
#main {
top: 50px;
left: 200px;
position: absolute;
border: 1px solid #00bfff;
width: 250px;
height: 27px;
}
input {
border: none;
width: 248px;
height: 25px;
position: absolute;
z-index: 200;
}
.icons {
text-align:center;
border:1px solid blue;
height: 23px;
width: 23px;
position: absolute;
top: 2px;
right: 2px;
z-index: 99999999999999999999999;
background-position: center;
background-repeat: no-repeat;
}
jQuery :
$("#main").focusin(function () {
log("Main div got focused");
});
$("#i").focusin(function () {
log("input got focused");
});
$("#Div2").focusin(function () {
log("dropdown div got focused");
});
$("#Div1").focusin(function () {
log("clear div got focused");
});
$("#main").focusout(function () {
log("Main div lost focused");
});
$("#i").focusout(function () {
log("input lost focused");
});
$("#Div2").focusout(function () {
log("dropdown div lost focused");
});
$("#Div1").focusout(function () {
log("clear div lost focused");
});
function log(msg) {
//window.console.log(msg);
$("body").append("<p>" + msg + "</p>");
}
需要帮助和指导
#Div1
和#Div2
有什么用?它们是用来作为某种按钮吗?还是用来传达验证状态的图标? - Jonathan Wilson