Jquery 在焦点之间切换
Jquery toggle between focus
好的,我的代码看起来像这样:
<div id="left" style="float:left; width:100px; margin-right:10px;">
<input id="first" value="something">
</div>
<div id="right" style="margin-left:20px; float:left; width:200px;">
<input id="second" value="something">
<input id="third" value="something">
<input id="fourth" value="something">
</div>
jquery:
$(function() {
$("#right").focusin(function() {
$( "#left" ).animate({
width: "200px"
}, 500 );
$( "#right" ).animate({
width: "100px"
}, 500 );
});
$("#right").focusout(function() {
$("#left").animate({
width: "100px"
}, 500 );
$("#right").animate({
width: "200px"
}, 500 );
});
})
但是当我在右侧 div 的输入之间单击时,它会调用 focusin/out,如何防止这种情况发生?
当您在点击第二个 id 后点击让我们说第三个 id 时,基本上两个事件都会被触发,对 id 右边的元素进行 focusin 和 focusout。这就是为什么。
如果您想避免这种情况,您可以改为添加点击/
$("#right").click(function() {
// do this
});
$("#left").click(function() {
// do this
});
如果 activeElement
是其他输入之一,您可以使用计时器而不做动画
$(function() {
$("#right").focusin(function(e) {
$("#left").stop(true,true).animate({
width: "200px"
}, 500);
$("#right").stop(true,true).animate({
width: "100px"
}, 500);
});
$("#right").focusout(function() {
setTimeout(function() {
if ( !($(document.activeElement).closest('#right').length &&
$(document.activeElement).is('input'))) {
$("#left").animate({
width: "100px"
}, 500);
$("#right").animate({
width: "200px"
}, 500);
}
},100);
});
})
input {
width: 100px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="left" style="float:left; width:100px; margin-right:10px;">
<input id="first" value="something">
</div>
<div id="right" style="margin-left:20px; float:left; width:200px;">
<input id="second" value="something">
<input id="third" value="something">
<input id="fourth" value="something">
</div>
好的,我的代码看起来像这样:
<div id="left" style="float:left; width:100px; margin-right:10px;">
<input id="first" value="something">
</div>
<div id="right" style="margin-left:20px; float:left; width:200px;">
<input id="second" value="something">
<input id="third" value="something">
<input id="fourth" value="something">
</div>
jquery:
$(function() {
$("#right").focusin(function() {
$( "#left" ).animate({
width: "200px"
}, 500 );
$( "#right" ).animate({
width: "100px"
}, 500 );
});
$("#right").focusout(function() {
$("#left").animate({
width: "100px"
}, 500 );
$("#right").animate({
width: "200px"
}, 500 );
});
})
但是当我在右侧 div 的输入之间单击时,它会调用 focusin/out,如何防止这种情况发生?
当您在点击第二个 id 后点击让我们说第三个 id 时,基本上两个事件都会被触发,对 id 右边的元素进行 focusin 和 focusout。这就是为什么。
如果您想避免这种情况,您可以改为添加点击/
$("#right").click(function() {
// do this
});
$("#left").click(function() {
// do this
});
如果 activeElement
是其他输入之一,您可以使用计时器而不做动画
$(function() {
$("#right").focusin(function(e) {
$("#left").stop(true,true).animate({
width: "200px"
}, 500);
$("#right").stop(true,true).animate({
width: "100px"
}, 500);
});
$("#right").focusout(function() {
setTimeout(function() {
if ( !($(document.activeElement).closest('#right').length &&
$(document.activeElement).is('input'))) {
$("#left").animate({
width: "100px"
}, 500);
$("#right").animate({
width: "200px"
}, 500);
}
},100);
});
})
input {
width: 100px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="left" style="float:left; width:100px; margin-right:10px;">
<input id="first" value="something">
</div>
<div id="right" style="margin-left:20px; float:left; width:200px;">
<input id="second" value="something">
<input id="third" value="something">
<input id="fourth" value="something">
</div>