Firing change and input events: what a mess!

<input type="text" onchange="alert('change!')" oninput="alert('input!')" />

Opera 9 Opera 9.5 Β Safari 3 Firefox 2 IE 7
Entering symbol input
input
change
input
input
change
input change
input
-
Deleting symbol(s) input
input
change
input
input
change
input change
input
-
Pasting symbol(s) - input
input
change
input change
input
-
Cutting symbol(s) - - input change
input
-
Moving symbol(s) input
input
change
input
input
change
n/a (?) change
input
-
Duplicating symbol(s) n/a n/a input change
input
-
Undo - input input change
input
 
Quit (leave) changed field - * - * change - change
Submit changed field - * - * change - -

* In Opera input and changed events are fired if events have not fired when you were in field (for example, in case of pasting or cutting in Opera 9).

IMHO at this moment Safari has most logical implementation of change and input events firing.