Heuy
Dewey
Louie
function processDucks() {
if (document.getElementById("heuy").checked) {
alert("Huey is checked!");
} else if (document.getElementById("dewey").checked) {
alert("Dewey is checked!");
} else {
alert("Louie is checked!");
}
alert(this.value + " is checked!");
}
If the same function is assigned to multiple elements, each gets its own bound copy
abort | blur | change | click | dblclick | error | focus |
keydown | keypress | keyup | load | mousedown | mousemove | mouseout |
mouseover | mouseup | reset | resize | select | submit | unload |
The click
event (onclick
) is just one of
many events that can be handled
function name (event) {
// an event handler function...
}
Event handlers can accept an optional parameter to represent the event that is occurring
Event objects have the following properties/methods:
Property | Description |
---|---|
type | what kind of event, such as "click" or "mousedown" |
target | the element on which the event occurred |
timestamp | when the event occurred |
Clicking
Name | Description |
---|---|
click | user presses/releases mouse button on the element |
dblclick | user presses/releases mouse button twice on the element |
mousedown | user presses down mouse button on the element |
mouseup | user releases mouse button on the element |
Movement
Name | Description |
---|---|
mouseover | mouse cursor enters the element's box |
mouseout | mouse cursor exits the element's box |
mousemove | mouse cursor moves around within the element's box |
Property/Method | Description |
---|---|
clientX clientY |
coordinates in browser window |
screenX screenY |
coordinates in screen |
offsetX offsetY |
coordinates in element (non-standard) |
button |
integer representing which button was pressed (0=Left
1=Middle, 2=Right) |
Move the mouse over me!
window.onload = function() {
let target = document.getElementById("target");
target.onmousemove = target.mousedown = showCoords;
};
function showCoords(event) {
document.getElementById("target").innerHTML =
"screen : (" + event.screenX + ", " + event.screenY + ")\n"
+ "client : (" + event.clientX + ", " + event.clientY + ")\n"
+ "button : (" + event.button;
screen : (333, 782) client : (222, 460) button : 0
Name | Description |
---|---|
focus | this element gains keyboard focus (attention of user's keyboard) |
blur | this element loses keyboard focus |
keydown | user presses a key while this element has keyboard focus |
keyup | user releases a key while this element has keyboard focus |
keypress | user presses and releases a key while this element has keyboard focus |
select | this element's text is selected or deselected |
Property Name | Description |
---|---|
keyCode |
ASCII integer value of key that was pressed
(convert to char with String.fromCharCode )
|
altKey, ctrlKey, shiftKey | true if Alt/Ctrl/Shift key is being held |
Issue: if the event you attach your listener to doesn't have the focus, you won't hear the event
Possible solution: attach key listener to entire page body,
document
, an outer element, etc.
document.getElementById("textbox").onkeydown = textKeyDown;
...
function textKeyDown(event) {
let key = String.fromCharCode(event.keyCode);
if (key == 's' && event.altKey) {
alert("Save the document!");
this.value = this.value.split("").join("-");
}
}
Each time you push down any key, even a modifier such as
Alt or Ctrl, the keydown
event fires
If you hold down the key, the keydown
event fires
repeatedly
keypress
event is a bit flakier and
inconsistent across browsers
Keyboard Key | Event Keycode |
---|---|
Backspace | 8 |
Tab | 9 |
Enter | 13 |
Escape | 27 |
Page Up, Page Down, End, Home | 33, 34, 35, 36 |
Left, Up, Right, Down | 37, 38, 39, 40 |
Insert, Delete | 45, 46 |
Window/Command | 91 |
F1-F12 | 112-123 |
Name | Description |
---|---|
contextmenu | the user right-clicks to pop up a context menu |
error | an error occurs when loading a document or an image |
load | the browser loads the page |
resize | the browser window is resized |
scroll | the user scrolls the viewable part of the page up/down/left/right |
unload | the browser exits/leaves the page |
The above can be handled on the window
object
element.addEventListener("event", function);
let button = document.getElementById("mybutton");
button.addEventListener("click", func1); // button.onclick = func1
button.addEventListener("click", func2); // button.onclick = func2
If you assign onclick
twice, the second replaces
the first
addEventListener
allows multiple listeners to be
called for the same event
Note that you do not include "on" in the event name!
window.onload
Listeners
window.onload = function;
window.addListener("load", function);
It is generally considered bad form to directly assign to
window.onload
(though it is ok for this class)
Multiple .js
files could be linked to the same
page, and if they all need to run code when the page loads, their
window.onload
statements will override each other
By calling window.addEventListener
instead, all of them
can run their code when the page is loaded
Event Method | Description |
---|---|
preventDefault |
stops the browser from doing its normal action on an event; for example, stops the browser from following a link when <a> tag is clicked |
stopPropagation | stops the browser from showing this event to any other objects that may be listening to it |
You can also return false;
from your event handler to
stop an event
window.onload = function() {
let form = document.getElementById("exampleform");
form.onsubmit = checkData;
};
function checkData(event) {
if (document.getElement("state").length != 2) {
alert("Error, invalid city/state."); // show error message
event.preventDefault();
return false; // stop form submission
}
}