2012-03-13 7 views
1

私は簡単なJavaScript質問があります。私は別のdivの上のクリックごとに、異なる値がJavaScriptの関数に渡されます。基本的クリック時に呼び出されるJavaScript関数に渡された最後の値を記憶する

<div onclick = "myClick('value 1')"> 
    button 1 
</div> 
<div onclick = "myClick('value 2')"> 
    button 2 
</div> 

以下は私のコードの断片です。

私の質問は、前のクリックで渡された値をどのように追跡することができますか?

たとえば、「ボタン1」をクリックすると、「値1」が関数に渡されます。後で「ボタン2」をクリックすると、前に「ボタン1」をクリックして「値1」を取得したかどうかを知ることができます。

助けてください、進んでいただきありがとうございます。

+0

..:たとえば、2つの数値を追加し、実行中の合計を保持機能 doSumを定義し、ここでのコードを考えます – Nanne

答えて

2

ようなものが必要とし関数:

var lastUsed = null; 
function myClick(value){ 
    prevClicked = lastUsed; //get the last saved value 
    ... 
    lastUsed = value; //update the saved value to the new value 
    ... 
} 

ここに行く

4

ちょうどあなたのスクリプト内の変数に追加します。

var lastClicked; 
var myClick = function(value) { 

    lastClicked = value; 

}; 
+0

ありがとうNanne:P – DoctorLouie

0

私はあなたがvar lastUsed; はあなたに追加の行を追加しますようにあなたは、変数のsomekindを定義することができ、この

var clickedButtons = []; 
function myClick(value){ 
... 
clickedButtons.push(value); 
... 
} 
2

変数が必要です。変数は、値を格納できる小さなボックスのようなものです。この場合、関数myClickに最後に渡された値を格納することができます。 JavaScriptで

、あなたはこのような変数を定義することができます

var lastClickedValue; 

あなたは、その変数に値を「置く」ことができます。あなたの名前をそこに入れたいとしましょう。あなたはこれを行うでしょう:

lastClickedValue = 'sams5817'; 

ここでトリッキーなビットです。変数には「スコープ」があります。あなたはそれを「生涯」と考えることができます。変数がスコープの終わりに達すると、変数を読み書きできなくなります。あたかも決してそうでないかのようです。関数はスコープを定義します。関数内で定義した変数は、関数の最後に消えます。たとえば、

function myClick(value) 
{ 
    var lastClickedValue; 

    alert('lastClickedValue is = ' + value); 

    lastClickedValue = value; 
} 

これはほぼ正しいと思われますか?変数を宣言し、最後の値を表示し、それを新しい値で更新しました。

しかし、lastClickedValueが関数myClickで宣言されていたので、その関数の最後に達したら、それはなくなりました。したがって、次回にmyClickと呼ぶと、lastClickedValueがもう一度作成されます。それは空になります。これを「初期化されていない」変数と呼びます。

だから何が問題なのですか?私たちはmyClickの終わりを過ぎても値を覚えようとしています。しかし、myClickの中にlastClickedValueと宣言したので、myClickの末尾には存在しません。

解決策は、myClickが実行された後に、lastClickedValueが引き続き存在することを確認することです。

したがって、私たちは異なる範囲でlastClickedValueを護る必要があります。幸運なことに、「グローバルスコープ」と呼ばれる大きなスコープがあります。ページが読み込まれてから、ユーザーが別のWebページに移動するまで存在します。だからこのようにしましょう:

var lastClickedValue; 

function myClick(value) 
{ 
    alert('lastClickedValue is = ' + value); 

    lastClickedValue = value; 
} 

これは非常に小さな違いです。変数lastClickedValueの宣言を関数myClickの外に移動しました。それは外にあるので、myClickの後に既存のものが維持されます。つまり、myClickと呼び出すたびに、lastClickedValueがそこに残ることになります。

これは、myClickに渡された最後の値が何だったのかを知らせます。

最後に、Javascriptチュートリアルのいくつかを探すことをお勧めします。私はいくつかの良いものをお勧めしたいと思っていますが、インターネットでいくつか見つけることができます。あなたがやっていることを理解する前にプログラムを書こうとすると、自分の能力よりも少ない仕事を自分で作り出すことになります。がんばろう!

+1

きれいな説明のために、地獄私はそれがあなたがそれを書くのに十分な時間がかかったと確信しています。私は本当に地獄のような問題を克服しないだろうが、ねえ、私はあなたを称賛したので、ねえ! – DoctorLouie

0

私は、誰もこれについて言及していないことに驚いていますが、関数はJavaScriptのファーストクラスのオブジェクトなので、属性とメソッドを関数に割り当てることもできます。

function toggleHelpDialog() { 
    if (typeof toggleHelpDialog.status === 'undefined') 
     toggleHelpDialog.status = true; 
    else 
     toggleHelpDialog.status = !toggleHelpDialog.status; 

    var layer = this.getLayer(); 

    if (toggleHelpDialog.status) layer.add(helpDialog); 
    else helpDialog.remove(); 

    layer.draw(); 
} 

をここで私はtoggleHelpDialog機能に「ステータス」という名前の属性を追加しました:だから、機能間の値を覚えておくために、私はここに、この機能を持っているように、あなたが何かを行うことができます呼び出します。この値は関数自体に関連付けられ、toggleHelpDialog関数と同じスコープを持ちます。 status属性に格納されている値は、関数への複数の呼び出しで保持されます。それは他のコードからアクセスでき、誤って変更されたので注意してください。

0

私たちはjavascript静的変数を利用することができます オブジェクトとしての機能の興味深い面の1つは、静的変数 を作成できることです。静的変数は、関数のローカルスコープ内の変数で、その値は 関数の呼び出しの間に存続します。 JavaScriptで静的変数を作成するには、問題の関数にインスタンス プロパティを追加します。あなたは、いくつかのセッションにまたがって、セッション中に、ページ上でそれを追跡しますか

function doSum(x,y){ 
    if (typeof doSum.static==='undefined'){ 
    doSum.static = x+y; 

}else{ 
    doSum.static += x+y; 
} 
if (doSum.static >= 100){doSum.static = 0;doSum.static += x+y;} 

    return doSum.static; 
} 
alert(doSum(5,15)) 
alert(doSum(10,10)) 
alert(doSum(10,30)) 
alert(doSum(20,30)) 
関連する問題