2011-11-17 177 views
0

我正在写一个小脚本来清除我的搜索表单,当他们第一次点击“仅”时。到目前为止,我有以下内容:Javascript变量未在函数中定义

$(function() { 
    if(typeof firstClick == 'undefined') 
    { 
    $("#search").live("focus", function() { 
     $(this).val(""); 
     var firstClick = true; 
    }); 
    } 
}); 

但是,即使用var firstClick = true;在函数中,脚本似乎每次都通过if语句。我确信我错过了一些愚蠢的东西,但我似乎无法弄清楚。

我试着将var firstClick作为false布尔值定义在函数的外部,然后检查它是否为false,但我仍然无法使函数中的变量变为true。

+0

我不明白如果这块如果将得到多次评估 –

回答

1

变量仅存在于它们被定义的范围内(使用var)和后代作用域中。您的typeof调用位于祖先范围内。那里不存在firstClick。您应该在外部范围中将变量定义为false,然后将其重新定义为true。而且,条件应该是里面的点击处理程序。

$(function() { 
    var firstClick = false; 

    $("#search").live("focus", function() { 
    if (!firstClick) { 
     $(this).val(""); 
     firstClick = true; // change the value in the outside scope 
    } 
    }); 
}); 
5

var firstClick = true;

您在这里重新声明firstClick。删除var,并在两个函数之外定义它。在赋值之前添加var会告诉Javascript将变量作用于当前函数,在您的情况下,该变量是分配给焦点事件的匿名函数。由于您将范围限制为var,因此外部函数无法看到它。

1

firstClick VAR是回调函数的局部范围内定义的,因而不是父代码可见。

var firstClick = false; 

$(function() { 
    if(!firstClick) 
    { 
    $("#search").live("focus", function() { 
     $(this).val(""); 
     firstClick = true; 
    }); 
    } 
}); 
1

问题是范围之一。变量firstClick仅存在于焦点事件中。你需要声明firstClick作为一个全球范围内的命名空间,如下所示:

(function($) { 
    var firstClick = false; 

    $('#search').live('focus', function() { 
     if (typeof firstClick === 'undefined') { 
      $(this).val(''); 
      firstClick = true; 
     } 
    }); 
}(jQuery));