2012-02-16 8 views
1

私は関数を作成するので、最初のクリックだけを数えているので、私はすべてのマウスのクリックヒットをカウントしたいと思います。カウント値を格納する変数を作成します。あなたが関数内var clicks宣言しているためだクリックカウント機能が動作していませんか?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>clicks</title> 

<script type="text/javascript"> 



function clickcount(){ 

var clicks=0; 
    document.getElementById('count').value= ++clicks; 


    } 

document.onclick=clickcount; 
</script> 


</head> 

<body> 

<input type="text" id="count" /> 
</body> 
</html> 
+0

http://jsfiddle.net/vuASn/ – xandercoded

+0

今私は、関数の外にvaribaleを置けば、それは、それはその値をincreamentsました。今私の質問は、関数の変数を外に置く必要がある理由です –

答えて

2

。呼び出されるたびに0で上書きされます。関数の範囲外で宣言してください。

var clicks = 0; 
function clickcount(){ 
    document.getElementById('count').value= ++clicks; 
} 

varキーワードは変数を初期化します。 JavaScriptは、より狭い関数スコープ内でより広いスコープで定義された使用可能な変数を作成します。そのため、関数外のvar clicks = 0を呼び出すと、グローバル(windowオブジェクト)スコープにclicksが配置されます。

+0

ありがとうmichael私はそれを得た。 –

3

あなたはグローバルな名前空間を汚染しないようにするには

var clicks=0; 
function clickcount(){ 

    document.getElementById('count').value= ++clicks; 

} 
1

...機能は同じ変数をインクリメントし続けるようにclicksをグローバルにする必要があり、あなたは匿名関数でコードをラップし、あなたのクリックを保存することができclosureに:

(function() { // Begin wrap with anonymous function 
    var clicks = 0; 
    function clickcount() { 
     document.getElementById("count").value = ++clicks; 
    } 

    // Attach to onload 
    window.onload = function() { 
     document.onclick = clickcount; 
    }; 
}()); // End wrap with anonymous function 
+0

+1ですが、おそらくloadイベントを使用してリスナーをアタッチし、 'document.getElementById(" count ")'がその* value *プロパティに割り当てる前に要素を返すことを確認する必要があります。 – RobG

+0

@RobG提案してくれてありがとう、私はonloadを追加しました。 – mc10

関連する問題