Проблема в том, что при переключении между входами / текстовыми областями focus()
срабатывает на новом сфокусированном элементе, а blur()
на последнем.
$expandBox
, таким образом, запрашивается slideUp()
И slideDown()
.
Чтобы решить эту проблему, вы должны указать этим анимациям остановить их при вызове. Таким образом, slideUp()
будет вызван и немедленно остановлен на slideDown()
.
Используйте для этого stop()
.
$("#commentBox").find("input,textarea").each(function() {
var $this = $(this);
var $expandBox = $this.parents("#commentBox").find(".expandBox");
$this.focus(function() {
$expandBox.stop().slideDown(250);
});
$this.blur(function() {
if ($this.val() === "" && $this.not(":focus")) {
$expandBox.stop().slideUp(250);
}
});
});