为什么我的jquery .each()函数无法正常工作?

时间:2010-09-25 19:03:10

标签: javascript jquery

我写了这个函数:

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);它警告每个输入的名称,所以我的功能有问题,但我无法弄清楚是什么。有什么帮助吗?

2 个答案:

答案 0 :(得分: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 = '';
    });
  });
});

答案 1 :(得分:1)

thisval是一个全局变量,因此它被每个循环替换。让它本地[在它前面的变量]它应该像魔术一样工作。

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