Javascript变量没有在函数中定义

时间:2011-11-17 19:07:08

标签: javascript jquery

我正在编写一个小脚本,以便在第一次点击“仅”时清除我的搜索表单。到目前为止,我有以下内容:

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

但是,即使用var firstClick = true定义变量也是如此;在函数中,脚本似乎每次都传递if语句。我确定我错过了一些愚蠢的东西,但我似乎无法弄明白。

我已经尝试将函数外部的var firstClick定义为false布尔值,然后检查它是否为false,但我仍然无法在函数中使变量成为现实。

4 个答案:

答案 0 :(得分:5)

var firstClick = true;

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

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

答案 2 :(得分:1)

您的firstClick var在回调函数的本地范围内定义,因此对父代码不可见。

var firstClick = false;

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

答案 3 :(得分:1)

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

(function($) {
   var firstClick = false;

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