所以,我读了很多关于这个问题的内容。我在网上找不到任何东西解决了我的问题。这是一些代码:
jQuery( 'input:not([type=submit]):not([type=hidden]), textarea' ).on( 'click', function() {
$this = jQuery( this );
parentWrap = $this.parents( 'label' );
inputLabel = parentWrap.find( '.label' );
otherInput = jQuery( 'input:not([type=submit]):not([type=hidden]), textarea' ).not( this );
if ( ! parentWrap.is( '.focused' ) ) {
parentWrap.addClass( 'focused' );
setTimeout( function() {
inputLabel.addClass( 'focused' );
}, 1000 );
}
otherInput.each( function( index, elem ) {
elem = jQuery( elem );
elemVal = elem.val();
elemParentWrap = elem.parents( 'label' );
elemInputLabel = elemParentWrap.find( '.label' );
if ( elemParentWrap.is( '.focused' ) ) {
if ( 0 === jQuery.trim( elemVal ).length ) {
elemParentWrap.removeClass( 'focused' );
setTimeout( function() {
elemInputLabel.removeClass( 'focused' );
}, 1000 );
}
}
});
});
过程:
.focused
个类。其中一个课程延迟添加。.focused
。当没有发现任何课程时,它不会执行任何操作。label
和.label
)(除了单击的一个)都应该删除它们的类.focused
,(其中一个相关元素有类延迟删除),但不会发生延迟删除。如何整理出来?
PS,希望我把一切都清楚。如果没有,请问一个问题。代码中还有小的输入值检查。请忽略它,因为它与问题无关。PS2,当我从第二个函数中删除超时时,与输入相关的两个元素都删除了它们的类。
答案 0 :(得分:2)
问题在于您没有声明变量,因此它们是全局变量。例如,取elemInputLabel
。 each
循环将该变量设置为其最后一个值,然后1秒后所有定时器触发其回调, all 引用相同的变量,该变量具有相同的值。
解决方案是使用var
之类的var elemInputLabel =
。现在,对于each
方法的每个回调,您都有单独的变量。确保声明所有变量,使它们对于它们的函数是本地的。