2011-11-17 132 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));