2011-05-14 81 views
0

這工作,用一個簡單的按鈕調用addDamage功能:簡單的JavaScript函數問題

var damage=0; 
function addDamage() 
{ 
damage+=10; 
document.getElementById("p1s").innerHTML=damage; 
} 

這不:

var damage=0; 
function addDamage(who) 
{ 
who+=10; 
document.getElementById("p1s").innerHTML=who; 
} 

使用此按鈕:

<button type="button" onclick="addDamage(damage)">Add</button> 

這是可能很明顯。我真的很新。謝謝!

+0

什麼是誰?以及它的數據類型是什麼 – Ibu

回答

1

Cheeso已確定的基本問題,這是JavaScript的參數值傳遞。爲了得到你想要的行爲,你可以用你的計數器對象:

var player1 = { damage: 0 }; 

function addDamage(who) { 
    who.damage+=10; 
    document.getElementById("p1s").innerHTML=who.damage; 
} 

那麼你的按鈕,這樣做:

<button type="button" onclick="addDamage(player1)">Add</button> 

大概你就會有其他的屬性player1,你可以把在該對象也是如此。

爲了使addDamage更加靈活,你也可以通過第二個參數來告訴您要顯示結果:

function addDamage(who, outputId) { 
    who.damage+=10; 
    document.getElementById(outputId).innerHTML=who.damage; 
} 

按鈕,然後看起來像:

<button type="button" onclick="addDamage(player1, 'p1s')">Add</button> 
0
var who=0; // want to use who not damage 
function addDamage(who) 
{ 
who+=10; 
document.getElementById("p1s").innerHTML=who; 
} 

// also change me from damage to who 
<button type="button" onclick="addDamage(who)">Add</button> 

漂亮的替代解決方案將是本

<button id="addDamage"> Add </button> 
<div id="showDamage"> </div> 

// add handler to button 
document.getElementById("addDamage").addEventListener("click", (function() { 
    // damage is not stored in global space. 
    var damage = 0, 
     // div is only gotten once. 
     div = document.getElementById("showDamage"); 
    // show functionality is in its own function so its easily changed 
    function show() { 
     div.textContent = damage; 
    } 
    // call show to show the initial damage 
    show(); 

    // return event handler 
    return function() { 
     // change damage 
     damage+=10; 
     // show the new damage 
     show(); 
    }; 
})()); 
4

您在函數中添加10〜who。通過調用時傳遞的參數,who取值爲damage這是一個全局變量。

該函數使用更新後的值who來設置元素的innerHTML。所有的工作。然後該函數退出。 who超出範圍。現在忘記了更新後的值who

當您再次單擊該按鈕時,它將使用值damage,該值仍然是其原始值0(零)。 who再次獲取該值,然後獲得10+,即10,依此類推。


要更新全局變量,請將其從函數中返回,並將其設置在處理程序中。

var damage=0; 
function addDamage(d) 
{ 
    d+=10; 
    document.getElementById("p1s").innerHTML=d; 
    return d; 
} 

<button type="button" onclick="damage=addDamage(damage);">Add</button> 
+0

我想要做的是添加到全局變量:損害,但能夠重用多個不同的全局變量的函數。我關門了嗎? – Casey

+0

@Casey - 在正確的軌道上,但你需要將你的傷害計數器包裹在物體中。見答案。 +1到@Cheeso用於識別根問題。 –

+0

是的,請參閱Joel Lee的回答:http:// stackoverflow。com/questions/5999235/simple-javascript-function-problem/5999324#5999324。你也可以從func中返回更新的值,並在onclick中設置變量。請參閱上述編輯。 – Cheeso