2010-09-25 139 views
3

我写了这个功能:为什么我的jquery .each()函数无法正常工作?

jQuery(document).ready(function() { 
    jQuery('input[type=text]').each(function(i) { 
     thisval = jQuery(this).val(); 

     jQuery(this).blur(function() { 
      if (jQuery(this).val() == '') { 
       jQuery(this).val(thisval); 
      } 
     }); // end blur function 
     jQuery(this).focus(function() { 
      if (jQuery(this).val() == thisval) { 
       jQuery(this).val(''); 
      }; 
     });// end focus function 
    }); //END each function 
}); // END document ready function 

它的设计,让输入的值,那么如果用户点击了,而无需输入一个新值,旧的价值回报。这适用于页面上的其中一个输入,但不适用于其他输入。但是,当我删除.blur和.focus函数并仅使用alert(thisval)时;它会提醒每个输入的名称,所以我的函数有些问题,但我无法弄清楚什么。任何帮助?

+0

谢谢你们!还在学习如何使用jQuery,希望随着时间的推移,我的代码将变得更干净和更智能。 – Joseph 2010-09-25 19:23:51

+0

通常情况下,您可以使用$而不是jQuery,除非它与另一个库冲突。否则,您可以将jQuery作为名为$的参数传递给闭包。 – 2010-09-25 19:47:38

+0

@James - 或者,对于'document.ready',第一个参数已经是'$',所以你可以在'jQuery(function($){''')中使用''''。 – 2010-09-25 20:00:53

回答

1

thisval是一个全局变量,所以它被替换为每个循环。让它变成本地的[在它前面贴上var],它应该像魔术一样工作。

你不应该一直重复创建jQuery(this)。这是非常低效的。 jQuery(这个)很贵。您应该将一个副本存储在一个变量中并使用该变量。

5

你声明你的变量时,需要var所以它不是被共享的全局之一,是这样的:

var thisval = jQuery(this).val(); 

而且因为你明确的文字输入处理,你可以只使用.value DOM属性,比如这个:

jQuery(function() { 
    jQuery('input[type=text]').each(function(i) { 
    var thisval = this.value; 
    jQuery(this).blur(function() { 
     if (this.value == '') this.value = thisval; 
    }).focus(function() { 
     if (this.value == thisval) this.value = ''; 
    }); 
    }); 
}); 
相关问题