I'm completely new to JavaScript. I'm trying to increment a variable inside the HTML, it's not working. Is my syntax wrong?
<script>
function rps() {
computerScore.value++;
computerScore.innerHTML = computerScore.value;
}
</script>
<html>
<b>computer score:</b><p id="computerScore" value="0">-</p>
<button type="button" onclick="rps()">Go</button><br>
</html>
isherwood
61.4k16 gold badges122 silver badges173 bronze badges
asked Mar 7, 2013 at 20:13
pasha_codes
6352 gold badges5 silver badges19 bronze badges
5 Answers 5
value is not a valid attribute for the <p> tag.
I think you want something like:
function rps() {
var computerScore = document.getElementById('computerScore');
var number = computerScore.innerHTML;
number++;
computerScore.innerHTML = number;
}
...
<b>computer score:</b><p id="computerScore">0</p>
answered Mar 7, 2013 at 20:16
Adam Plocher
14.3k6 gold badges51 silver badges83 bronze badges
Sign up to request clarification or add additional context in comments.
1 Comment
mplungjan
Actually number is a string until the ++ so perhaps number = +computerscore.innerHTML is more correct
A few problems :
- on most browsers, you can't get an element by id just as a global property
- an attribute isn't always a property of an element (the value is only a property of input elements)
You can do this :
function rps() {
// fetch the element :
var element = document.getElementById('computerScore');
// get the attribute, parse it and increment it :
value = parseInt(element.getAttribute('value'), 10)+1;
// stores the incremented value :
element.setAttribute('value', value);
// and change the innerHTML (conversion to string is implicit)
element.innerHTML = value;
}
answered Mar 7, 2013 at 20:17
Denys Séguret
384k90 gold badges813 silver badges780 bronze badges
Comments
A couple issues:
computerScoreis nothing; you probably wantdocument.getElementById('computerScore')valueon a<p>is not valid. Usedata-valueor something instead (or
var computerScore = document.getElementById('computerScore');
function rps() {
computerScore.dataset.value++;
computerScore.innerHTML = computerScore.dataset.value;
}
Note that dataset.value is a string, but the ++ coerces it to an integer.
I would also suggest using event bindings rather than event attributes, e.g. button.addEventLister
answered Mar 7, 2013 at 20:19
Explosion Pills
193k56 gold badges341 silver badges417 bronze badges
3 Comments
Bergi
The
getElementById should be called after DOMready, i.e. inside rpsExplosion Pills
@mplungjan w3.org/TR/2011/WD-html5-20110525/…
vsync
dataset is not old IE compliant, should use getAttributeThe best option will be to pass in an event object from the rps() method in the HtML, like this: rps(event).
Then retrieve it from the Javascript method like this:
function rps(event) {
var computerScore = event.CurrentTarget.innerText;
computerScore++;
computerScore = number;
}
answered May 16, 2017 at 17:41
Misterwyz
1011 gold badge2 silver badges6 bronze badges
var elm = whatever //assuming you select your element using the DOM
// update value
elm.innerHTML = +elm.innerHTML + 1;
answered Feb 17, 2015 at 17:57
vsync
133k61 gold badges345 silver badges430 bronze badges
Comments
lang-js
getElementByIdfunction for that.