Learning intentions
- Understand what JavaScript is and why it is used to make web pages interactive
- Know how to write inline event handlers using
onmouseoverandonmouseout - Know how to use
onclickto run code when an element is clicked - Know how to use
document.getElementById()to target an element and change itsstyleorinnerHTML - Be able to write and call simple JavaScript functions from HTML event handlers
Success criteria
- I can explain what JavaScript does and how it differs from HTML and CSS
- I can write
onmouseoverandonmouseoutevent handlers on HTML elements - I can write a JavaScript function that changes an element's style property using
document.getElementById() - I can write a JavaScript function that changes an element's text using
innerHTML - I can identify and fix common JavaScript errors (case sensitivity, camelCase, missing brackets)
Answer before the lesson begins.
1. What is JavaScript mainly used for in web development?
2. Which JavaScript event fires when the mouse pointer moves onto an element?
3. Which of the following correctly changes the text colour of an element with id "box" to red?
Key vocabulary
onmouseover="doSomething()".onmouseoveronmouseoutonmouseover.onclickdocument.getElementById()id attribute. Used to target specific elements so their properties can be changed.innerHTMLelement.innerHTML = "Hello" replaces the element's content with "Hello".style propertybackgroundColor instead of background-color.JavaScript: Events and Mouse Handling
What is JavaScript?
HTML defines the structure and content of a web page. CSS controls the appearance and layout. JavaScript is the third layer β it makes pages interactive. JavaScript runs directly in the browser and can respond to what the user does: moving the mouse, clicking buttons, typing text, and more.
In the N5 course, we use JavaScript to detect mouse events and update what the user sees β changing colours, text, and images without reloading the page.
How JavaScript is added to a page
JavaScript is written inside <script> tags, placed before the closing </body> tag. Event handlers are added directly as attributes on HTML elements:
<!-- The event handler calls a function when hovered --> <button onmouseover="highlight()">Hover over me</button> <script> function highlight() { // code runs when mouse moves over the button } </script>
Mouse events: onmouseover and onmouseout
onmouseover fires when the mouse pointer moves onto an element. onmouseout fires when the mouse pointer moves off the element. These two events are always used together to create a hover-and-restore effect:
<div id="box" onmouseover="turnYellow()" onmouseout="turnWhite()"> Hover over this box </div> <script> function turnYellow() { document.getElementById("box").style.backgroundColor = "yellow"; } function turnWhite() { document.getElementById("box").style.backgroundColor = "white"; } </script>
Every JavaScript event follows this flow: user action β event β function β DOM change
Targeting elements with document.getElementById()
document.getElementById("id") finds the element with that id and returns it so you can change its properties. The id value must be in quotes and must exactly match the id attribute in the HTML.
Once you have the element, you can change:
- A style property:
element.style.backgroundColor = "yellow" - The text content:
element.innerHTML = "New text"
Note that CSS properties with hyphens (like background-color) become camelCase in JavaScript (backgroundColor). This is because hyphens are not valid in JavaScript property names.
| CSS property | JavaScript equivalent |
|---|---|
background-color | style.backgroundColor |
color | style.color |
font-size | style.fontSize |
border-radius | style.borderRadius |
display | style.display |
Changing text with innerHTML
innerHTML lets you replace the text (or HTML) inside an element. This is useful for updating messages, labels, or any text content in response to a user action:
<p id="msg">Click the button below.</p> <button onclick="showMessage()">Click me</button> <script> function showMessage() { document.getElementById("msg").innerHTML = "Hello, world!"; } </script>
The onclick event
onclick runs JavaScript when the user clicks an element. It works on buttons, links, images, and other elements. Like onmouseover, it calls a function defined in the <script> block:
<button onclick="changeColour()">Change colour</button> <script> function changeColour() { document.getElementById("heading").style.color = "red"; } </script>
Writing and calling functions
A JavaScript function is a named block of code. You define it once and call it from any event handler. The structure is always:
function functionName() { // code to run goes here }
To call a function from an event handler, write its name followed by () β the brackets are required and tell JavaScript to actually run the function:
<button onmouseover="highlight()">Hover</button> <!-- correct: with () --> <button onmouseover="highlight">Hover</button> <!-- wrong: missing () -->
Worked examples
Write a <div> that turns yellow when the mouse moves over it and returns to white when the mouse leaves.
<div> an id so JavaScript can find it, and add onmouseover and onmouseout event handlers calling two functions.<script> block. Each function uses document.getElementById() to find the div and changes its style.backgroundColor.background-color (hyphen); JavaScript uses backgroundColor (camelCase).<div id="box" onmouseover="turnYellow()" onmouseout="turnWhite()" style="padding:1rem;border:1px solid #ccc;"> Hover over me </div> <script> function turnYellow() { document.getElementById("box").style.backgroundColor = "yellow"; } function turnWhite() { document.getElementById("box").style.backgroundColor = "white"; } </script>
Write a button that, when clicked, changes the text of a paragraph from "Click the button." to "Hello, world!"
<p> element an id of "msg" so the function can find it.onclick event handler to the button, calling the function showMessage().document.getElementById("msg").innerHTML to set the new text.<p id="msg">Click the button.</p> <button onclick="showMessage()">Click me</button> <script> function showMessage() { document.getElementById("msg").innerHTML = "Hello, world!"; } </script>
Create an image that swaps to a different image on onmouseover and reverts on onmouseout. This is how early rollover navigation menus worked β the original web standard for interactive nav images before CSS :hover was widely supported.
<img> element an id so JavaScript can find it.onmouseover function, change the src attribute to the hover image. In onmouseout, set it back to the original image.src property is accessed via element.src β no .style needed here because src is an HTML attribute, not a CSS property.<img id="logo" src="logo_normal.png" alt="School logo" onmouseover="swapIn()" onmouseout="swapOut()"> <script> function swapIn() { document.getElementById("logo").src = "logo_hover.png"; } function swapOut() { document.getElementById("logo").src = "logo_normal.png"; } </script>
Before CSS :hover was widely supported, this image-swap technique was how web designers built interactive navigation menus. It is less common now but still examined at N5.
Write a paragraph element with id="highlight" and text "Hover over me". The paragraph should:
- Change its
backgroundColorto#E6F1FBwhen the mouse moves over it (onmouseover) - Return to
transparentwhen the mouse moves away (onmouseout)
Show the HTML element with its event handlers, and the two JavaScript functions.
<p id="highlight" onmouseover="addHighlight()" onmouseout="removeHighlight()">Hover over me</p> <script> function addHighlight() { document.getElementById("highlight").style.backgroundColor = "#E6F1FB"; } function removeHighlight() { document.getElementById("highlight").style.backgroundColor = "transparent"; } </script>
Key points: the id in getElementById must match the id attribute exactly; use backgroundColor (camelCase) not background-color; the value must be in quotes.
getElementById β writing getElementByID instead. JavaScript is case-sensitive. getElementById has a lowercase d at the end. Writing ID (capital) causes an error and the code will not run. This is the single most common JavaScript typo at N5 level.style.backgroundColor = red fails because red is treated as a variable name, not a colour string. All CSS values in JavaScript must be in quotes: style.backgroundColor = "red".style.background-color is invalid in JavaScript. The hyphen means "subtract". All multi-word CSS properties become camelCase in JavaScript: background-color β backgroundColor, font-size β fontSize, border-radius β borderRadius.() when calling a function in an event handler: onmouseover="highlight" does nothing β JavaScript sees it as referring to the function object, not calling it. Always include the brackets: onmouseover="highlight()".The N5 exam tests JavaScript in two main ways: (1) you are shown a function and asked to predict what happens β read the event handler to find which event triggers it, then trace the function to see what property changes on which element. (2) You are shown broken code and asked to identify and fix the error β always check: is getElementById spelled correctly? Is the value in quotes? Is the property camelCase? Are the brackets present in the event handler?
A strong 2-mark answer when asked "what happens when the user hovers over the button?": "The onmouseover event fires and the named function is called (1 mark). The function uses document.getElementById() to find the target element and changes its style property / innerHTML (1 mark)."
Questions 1β4 are auto-checked. Questions 5β10 are self-marked β write your answer, then reveal the model answer to check your work.
1. Which JavaScript event fires when the mouse pointer leaves an element? TYPE 1
2. What does element.innerHTML = "Welcome!" do? TYPE 1
3. What does document.getElementById("banner") return? TYPE 1
4. Which of these is the correct syntax for an onmouseover event handler? TYPE 1
5. Write the HTML and JavaScript to make a <div id="banner"> change its text to "Welcome!" when the mouse enters, and back to "Hover over me" when the mouse leaves. (3 marks) TYPE 2
<div id="banner"
onmouseover="showWelcome()"
onmouseout="showDefault()">
Hover over me
</div>
<script>
function showWelcome() {
document.getElementById("banner").innerHTML = "Welcome!";
}
function showDefault() {
document.getElementById("banner").innerHTML = "Hover over me";
}
</script>
Marks: correct HTML element with both event handlers (1); showWelcome() function correctly sets innerHTML to "Welcome!" (1); showDefault() function correctly restores original text (1).
6. Explain the difference between onmouseover and onclick. Give one example of when you would use each. (2 marks) TYPE 2
onclick fires when the user clicks the element (presses and releases the mouse button). Example: showing a hidden menu or changing a heading's text when a button is clicked (1 mark).
Key distinction: onmouseover requires only movement; onclick requires a deliberate click action.
7. Write a complete working example: a button that, when clicked, changes the colour of a heading with id="title" to red. Include both the HTML and the JavaScript function. (2 marks) TYPE 2
<h1 id="title">My Heading</h1>
<button onclick="makeRed()">Change colour</button>
<script>
function makeRed() {
document.getElementById("title").style.color = "red";
}
</script>
Marks: button with correct onclick calling the function (1); function using document.getElementById("title").style.color = "red" with correct camelCase and quoted value (1).
8. A pupil writes the following code. Identify the error and write the corrected version. (2 marks) TYPE 2
document.getElementByID("box").style.color = "blue";
getElementByID has a capital D at the end. JavaScript is case-sensitive β the correct method name is getElementById with a lowercase d (1 mark).Corrected code:
document.getElementById("box").style.color = "blue";
(1 mark for the correctly spelled corrected version)
9. Write the HTML and JavaScript for a navigation bar with two list items β "Home" and "About" β where each item changes its background colour to #E6F1FB on onmouseover and reverts to transparent on onmouseout. (3 marks) TYPE 2
<nav>
<ul>
<li id="nav-home"
onmouseover="highlightHome()"
onmouseout="clearHome()">Home</li>
<li id="nav-about"
onmouseover="highlightAbout()"
onmouseout="clearAbout()">About</li>
</ul>
</nav>
<script>
function highlightHome() {
document.getElementById("nav-home").style.backgroundColor = "#E6F1FB";
}
function clearHome() {
document.getElementById("nav-home").style.backgroundColor = "transparent";
}
function highlightAbout() {
document.getElementById("nav-about").style.backgroundColor = "#E6F1FB";
}
function clearAbout() {
document.getElementById("nav-about").style.backgroundColor = "transparent";
}
</script>
Marks: correct HTML structure with ids and both event handlers on each item (1); mouseover functions correctly set backgroundColor (1); mouseout functions correctly revert to transparent (1). Accept alternative approaches (e.g. passing this as a parameter) if syntactically correct.
10. Describe step by step what happens when a user hovers over a button that has onmouseover="highlight()". Start from "the user moves the mouseβ¦" (3 marks) TYPE 2
onmouseover event on that element (1 mark).2. The browser sees the
onmouseover="highlight()" attribute and calls the highlight() JavaScript function (1 mark).3. The function runs β it uses
document.getElementById() to find the target element and updates its style property or innerHTML, immediately changing what the user sees (1 mark).
Suggested timing: Two periods (approx 3 hours). Period 1: JavaScript intro, onmouseover and onmouseout only (Examples 1 and 3), Now you try, warm-up. Period 2: onclick, innerHTML, task set Q5βQ10.
Opening demo β live DevTools: Open browser DevTools console on the projector. Type document.getElementById("theme-toggle").style.backgroundColor = "red" and press Enter. The theme button turns red instantly. This single demo shows pupils that JavaScript changes the live page. Then show it reverting. This is more motivating than any explanation.
Period 1 focus β mouseover/mouseout only: Keep the first period entirely on the colour-change pattern. Every pupil should have a working mouseover example running in a file on their machine before the period ends. Do not introduce onclick or innerHTML until Period 2.
Case sensitivity: Write getElementById and getElementByID on the board side by side. Ask pupils to spot the difference. Then explain why it matters. This prevents Q8-style errors before they happen.
CamelCase: Show the CSS-to-JS conversion table from the notes on the projector. Give pupils 2 minutes to convert 5 CSS properties to JS equivalents (background-color, font-size, border-radius, text-align, font-weight). Quick written task, then check answers together.
Q8 (case-sensitive error) is a real SQA question type β worth spending 5 minutes discussing after pupils attempt it.