The most significant difference between these two events is what causes the value change on the <input>.
According to MDN:
The input event fires when the value of an <input>, <select>, or <textarea> element has been changed.
AKA,
input fires any time the value changes.
change is a little bit more complicated:
The change event is fired for <input>, <select>, and <textarea> elements when an alteration to the element's value is committed by the user. Unlike the input event, the change event is not necessarily fired for each alteration to an element's value.
In other words,
change fires when the user changes the value.
When exactly it fires depends on the type of <input>:
For...
- "radio" and "checkbox":
- When element is
:checked, either by keyboard or mouse click
- "date" and "file":
- When a change is explicitly committed, ie. selecting a date or file
- "text":
- When the element loses focus after its value has been changed, but not committed
Fair warning that browsers are fickle, and don't always agree on events. This is indeed the spec, however, and you should be able to count on these timings.