2017-02-18 100 views
3

我想在用戶點擊一個按鈕時更改全局變量x。但是,它沒有被改變。我在Google上研究過這個問題,看起來我做的一切都是正確的。點擊功能沒有更新全局變量

testing.html:

<!DOCTYPE html> 
<html> 
<head> 
    <title>Testing</title> 
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> 
    <script type="text/javascript" src="testing.js"></script> 
    <style> 
     div { 
      border: solid 1px orange; 
      height: 50px; 
      width: 50px; 
      font-size: 45px; 
      text-align: center; 
     } 
    </style> 
</head> 
<body> 
    <button>Click here</button> 
    <div><div/> 
</body> 
</html> 

tesing.js:

var x; 
$(document).ready(function() { 
    x = 0; 
    $("div").text(x); 
    $("button").on("click", function() { 
     x = 1; 
    }); 
    $("div").text(x); //the div stays at "0" even after I click the button 
}); 

如果我把$("div").text(x);點擊功能裏面x = 1後,然後它的作品,但我需要它在改變x全局範圍,而不是本地範圍,所以我可以在html文件中的其他JS函數中使用它。

編輯: 我試圖測試x外的點擊功能的原因是因爲我需要使用更新x在HTML文件中的文件準備功能,所以我不能做點擊功能中的所有內容。也許我想要做的事是不可能的?但我認爲這就是全球變量存在的原因?

+2

當您單擊所以那麼'x'將遞增的單擊事件只會火,但'$( 「格」)文本(X);'表達會默認情況下,當'x'總是'0'時,在DOM上執行,所以你想做的事情沒有意義。 –

+0

如何在單擊按鈕後更改稍後的功能(不在點擊功能中)以進行更改? –

回答

1

您必須更新點擊處理程序中的HTML。 $("div").text(x);x的值指定爲$("div")的文本,它不會將文本綁定到該變量,因此在更新變量的值時必須更新文本。 。

var x = 0; 
 
$("div").text(x); 
 
$("button").on("click", function() { 
 
    $("div").text(++x); 
 
});
div { 
 
    border: solid 1px orange; 
 
    padding: 10px 15px; 
 
    display: inline-block; 
 
    font-size: 45px; 
 
    text-align: center; 
 
} 
 
div::before { 
 
    content: "x = "; 
 
}
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> 
 
<button>Increment</button><br> 
 
<div></div>