Reputation: 3206
I'm making a web page with JavaScript and HTML5. I wrote some code that adds text to a div.
<script type="text/javascript">
var newGame = document.getElementById('playerStats');
newGame.innerHTML += 'Name: ' + getPlayerName() + '<br/>';
newGame.innerHTML += 'Class: ' + getPlayerClass() + '<br/>';
newGame.innerHTML += 'Level: ' + getPlayerLevel() + '<br/>';
newGame.innerHTML += 'XP: ' + getPlayerXP() + ' / ' + needXP[getPlayerLevel()];
</script>
Now let's say that the player's XP has changed. I don't want to have to reload the page to see the new XP. I want the div displaying the player stats to refresh immediately, without a page reload. Any ideas?
P.S.: Using load()
isn't the best solution. I tried that already and it's not working as it should (the div becomes smaller and weird things happen).
Update: I did something like this right now, but is there a better approach?
function updateStats(){
var newGame = document.getElementById('playerStats');
newGame.innerHTML = '';
newGame.innerHTML += 'Name: ' + getPlayerName() + '<br/>';
newGame.innerHTML += 'Class: ' + getPlayerClass() + '<br/>';
newGame.innerHTML += 'Level: ' + getPlayerLevel() + '<br/>';
newGame.innerHTML += 'XP: ' + getPlayerXP() + ' / ' + needXP[getPlayerLevel()];
}
function addXP() {
player.XP++;
if(player.XP >= needXP[getPlayerLevel()]){
player.Level++;
player.XP = 0;
alert('Level UP!');
}
store.set('player', { Name: getPlayerName(), Class: getPlayerClass(), Level: getPlayerLevel(), XP: player.XP });
updateStats();
}
Upvotes: 2
Views: 494
Reputation: 12239
Currently you have a function that gets each data point that appears in newGame
: getPlayerXP
, getPlayerLevel
, and so on. You can write a corresponding set of functions to set each data point. For example:
function setPlayerXP(player, xp) {
player.xp = xp;
updateStats();
}
By including a call to updateStats()
, you ensure that newGame
gets updated when necessary. Now make sure that you use setPlayerXP
whenever you want to assign a new value to that player attribute.
Upvotes: 1