2014-03-02 18 views
0

因此,這裏是我正在做的一個愚蠢的版本。我想改變一個跨度的onclick來調用一個變量作爲參數的函數。我希望它使用該變量,因爲它在創建新的onclick時不存在,因爲該變量是在單擊時發生的。將onclick更改爲一個變量作爲參數

<html> 
<head> 
<script> 
function share(it) { 
    alert("We wanted 1, we got "+ it); 
} 
</script> 
</head> 
<body> 
<span id="key">Click me</span> 

<script> 
var x = 1; 
document.getElementById('key').onclick = function() {share(x)} 
x++; 
</script> 

</body> 
</htmL> 
+3

你只增加一次變量,在函數內部執行。 – elclanrs

+1

@elclanrs:*「......這是我正在做的一個愚蠢的版本」*很確定這是一個非常簡單的演示來說明這個概念。 –

回答

1

不要使用函數()直接使用創建onclick函數的函數:

<html> 
<head> 
<script> 
function share(it) { 
    alert("We wanted 1, we got "+ it); 
} 

function makeFunction(x) { 
return function() {share(x);} 
} 

</script> 
</head> 
<body> 
<span id="key">Click me</span> 

<script> 
var x = 1; 
document.getElementById('key').onclick = makeFunction(x) 
x++; 
</script> 

</body> 
</html> 
0

使X的副本,並傳遞給函數

<html> 
<head> 
<script> 
function share(it) { 
    alert("We wanted 1, we got "+ it); 
} 
</script> 
</head> 
<body> 
<span id="key">Click me</span> 

<script> 
var x = 1; 
var copyOfx = x + 0; 
document.getElementById('key').onclick = function() {share(copyOfx)} 
x++; 
</script> 

</body> 

1

我認爲你需要這樣的:

<html> 
<head> 
<script> 
function share(it) { 
    alert("We wanted 1, we got "+ it); 
} 
</script> 
</head> 
<body> 
<span id="key">Click me</span> 

<script> 
function assign(y) { 
    return function() { share(y); }; 
} 
var x = 1; 
document.getElementById('key').onclick = assign(x); 
x++; 
</script> 

</body> 
</html> 
0

您只需要在頭部聲明變量即可。該變量是用戶定義的並且是硬編碼的,因此它可以加載到頭部,然後在發生點擊時在函數中引用它。你不需要傳遞一個參數

+0

當其他代碼更改'x'時,處理程序將獲得更改的版本。這是OP試圖避免的。 –

+0

我可能會誤讀,但不能在頭部聲明一個'var v',然後將一小段腳本放在它的初始狀態所需的文檔變量的正下方'的文檔中有一些東西,然後在運行函數時只引用頭部變量 – 2014-03-02 00:57:00

+0

如果您的意思是一個單獨的變量,那麼是的,但任何意外或有意改變它的代碼都會反映在處理程序中。 –