我的HTML代码看起来像这样
<div class="wrap">
<div class="inputs">
<input type="text">
<p>X</p>
</div>
<div class="inputs">
<input type="text">
<input type="text">
<p>x</p>
</div>
</div>
我想要实现的目标是:
我为它创建了这个jQuery代码
$(".inputs p").hide();
$(".inputs").focusin(function () {
$(this).find("p").slideDown();
});
$(".inputs").focusout(function () {
$(this).find("p").slideUp();
});
它可以工作,但是对于有多个输入的div.inputs,它开始隐藏段落然后再开始显示它。
我的代码出了什么问题?
答案 0 :(得分:0)
不要将JavaScript用于CSS的工作。
.inputs>p {
display: none;
}
.inputs>input:focus~p {
display: block;
}
答案 1 :(得分:0)
像Niet the Dark Absol一样,我会主张尽可能使用CSS(也适用于动画)。但是如果你真的需要通过jQuery处理这个问题,你可以简单地添加.stop()
,以便在相同输入组内的输入之间改变焦点时防止上/下动画。
$(".inputs p").hide();
$(".inputs").focusin(function () {
$(this).find("p").stop().slideDown();
});
$(".inputs").focusout(function () {
$(this).find("p").stop().slideUp();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="wrap">
<div class="inputs">
<input type="text">
<p>X</p>
</div>
<div class="inputs">
<input type="text">
<input type="text">
<p>x</p>
</div>
</div>
答案 2 :(得分:0)
$(function(){
$('p').hide();
$("input[type=text]").focusin(function() {
$(this).parents("div.inputs").find('p').show();
});
$("input[type=text]").focusout(function() {
$(this).parents("div.inputs").find('p').hide();
});
})