53

I'm trying to make a simple page that asks you for your name, and then uses name.length (JavaScript) to figure out how long your name is.

This is my code so far:

<script>
var name = prompt("What's your name?");
var lengthOfName = name.length
</script>
<body>
</body>

I'm not quite sure what to put within the body tags so that I can use those variables that I stated before. I realize that this is probably a really beginner level question, but I can't seem to find the answer.

Arun Bertil
  • 4,598
  • 4
  • 33
  • 59
Joseph
  • 680
  • 1
  • 5
  • 10

8 Answers8

99

You don't "use" JavaScript variables in HTML. HTML is not a programming language, it's a markup language, it just "describes" what the page should look like.

If you want to display a variable on the screen, this is done with JavaScript.

First, you need somewhere for it to write to:

<body>
    <p id="output"></p>
</body>

Then you need to update your JavaScript code to write to that <p> tag. Make sure you do so after the page is ready.

<script>
window.onload = function(){
    var name = prompt("What's your name?");
    var lengthOfName = name.length

    document.getElementById('output').innerHTML = lengthOfName;
};
</script>

window.onload = function() {
  var name = prompt("What's your name?");
  var lengthOfName = name.length

  document.getElementById('output').innerHTML = lengthOfName;
};
<p id="output"></p>
gen_Eric
  • 223,194
  • 41
  • 299
  • 337
  • 2
    Thanks! So I would put the script after the body tags? – Joseph May 04 '15 at 21:37
  • 3
    @Joseph: Script tags normally go in the ``. `window.onload` binds an event so that the code won't run until the page is loaded. – gen_Eric May 04 '15 at 21:42
  • 2
    Okay, thanks! Best answer :) But if I were to remove that window.onload and put it in the beginning, would that change anything? – Joseph May 04 '15 at 21:49
  • 3
    @Joseph: That would change *everything*! When the browser loads your page, it starts from the top down. So, if you remove `window.onload`, then it would try to write to the `

    ` tag before it exists. You *could* remove the `window.onload`, if and only if you put the script tag after the `

    `. I prefer to keep my scripts in the ``.
    – gen_Eric May 04 '15 at 21:56
  • mind to run script innerHTML part after all html loads! – Sebastian Juarez Apr 13 '20 at 02:55
11

You can create a <p> element:

<!DOCTYPE html>
<html>
  <script>
  var name = prompt("What's your name?");
  var lengthOfName = name.length
  p = document.createElement("p");
  p.innerHTML = "Your name is "+lengthOfName+" characters long.";
  document.body.appendChild(p);
  </script>
  <body>
  </body>
  </html>
user1823
  • 1,111
  • 6
  • 19
  • 1
    Thanks. The code snippet runner within StackOverflow seems like it works. I'm wondering how that works; I was thinking about writing it so that it was like "Your name is x characters long". – Joseph May 04 '15 at 17:26
  • I can fix that for you easily. This works by creating a paragraph element within the javascript, adding the text, and adding the element to the page. – user1823 May 04 '15 at 17:34
  • 1
    So how would I do that? – Joseph May 04 '15 at 21:35
8

You can create an element with an id and then assign that length value to that element.

var name = prompt("What's your name?");
var lengthOfName = name.length
document.getElementById('message').innerHTML = lengthOfName;
<p id='message'></p>
Quentin
  • 914,110
  • 126
  • 1,211
  • 1,335
imran qasim
  • 1,050
  • 13
  • 18
  • 2
    `.value` won't exist on a `

    `, only `input`. PS I'm not the downvoter, this answer is easily fixed and then is a correct answer.

    – Tom May 04 '15 at 17:17
2
<head>
    <title>Test</title>
</head>

<body>
    <h1>Hi there<span id="username"></span>!</h1>
    <script>
       let userName = prompt("What is your name?");
       document.getElementById('username').innerHTML = userName;
    </script>
</body>
Nico
  • 31
  • 1
1

Try this:

<body>
    <div id="divMsg"></div>
</body>
<script>
    var name = prompt("What's your name?");
    var lengthOfName = name.length;
    document.getElementById("divMsg").innerHTML = "Length: " + lengthOfName;
</script>
Márcio Gonzalez
  • 1,020
  • 1
  • 8
  • 20
0

You cannot use js variables inside html. To add the content of the javascript variable to the html use innerHTML() or create any html tag, add the content of that variable to that created tag and append that tag to the body or any other existing tags in the html.

Kalyan Kumar S
  • 204
  • 1
  • 4
  • 8
0

The HTML tags that you want to edit is called the DOM (Document object manipulate), you can edit the DOM with many functions in the document global object.

The best example that would work on almost any browser is the document.getElementById, it's search for html tag with that id set as an attribute.

There is another option which is easier but works only on modern browsers (IE8+), the querySelector function, it's will find the first element with the matched selector (CSS selectors).

Examples for both options:

<script>
var name = prompt("What's your name?");
var lengthOfName = name.length
</script>
<body>
  <p id="a"></p>
  <p id="b"></p>
  <script>
    document.getElementById('a').innerHTML = name;
document.querySelector('#b').innerHTML = name.length;</script>
</body>
yotamN
  • 711
  • 2
  • 9
  • 22
-2

You could get away with something as short as this:

<script>
  const name = prompt("What's your name?") ?? "";
  document.write(`<p>${name.length}</p>`);
</script>

It's not a very clean way of doing it but using document.write is not much worse than calling prompt() as soon as the page loads.

A more user-friendly approach would be to have an actual text input on the page and to dynamically update the length as they type using an event listener.

<label>Name: <input id="name-input"></label><br>
Length: <output id="name-length-output" for="name-input">0<output>

<script type="module">
    const nameInput = document.getElementById("name-input");
    const nameLengthOutput = document.getElementById("name-length-output");

    nameInput.addEventListener("input", e => {
        nameLengthOutput.textContent = nameInput.value.length;
    });
</script>

If you want to learn how to manipulate pages with JavaScript, the Mozilla Developer Network has a good tutorial about the DOM.

Domino
  • 6,314
  • 1
  • 32
  • 58
  • 4
    I wouldn't actually suggest using `document.write`. You should be using `.innerHTML` (or `.appendChild`). I guess it's ok if the script is running *before* the page is fully loaded, but once the page is fully loaded, `document.write` will erase the whole page. – gen_Eric May 04 '15 at 17:20
  • [More reasons not to use document.write](http://stackoverflow.com/questions/802854/why-is-document-write-considered-a-bad-practice) – Tom May 04 '15 at 17:22
  • @Tom That link pretty much confirms my thoughts, innerHTML is almost as bad as document.write. – Domino May 04 '15 at 17:25