Для упрощения реализации обработки событий я рекомендую вам использовать библиотеку, такую как Prototype или Jquery (Обратите внимание, что обе ссылки ведут к соответствующей документации по обработке событий.
Чтобы использовать их, нужно помнить 3 вещи:
- Какой элемент DOM вы хотите наблюдать
- Какое событие вы хотите захватить
- Какое действие вызовет событие
Эти три пункта являются взаимоисключающими, и это означает, что вам нужно заботиться о трех при написании кода.
Итак, имея в виду, используя Prototype, вы можете сделать следующее:
Event.observe($('id_of_the_element_to_observe'), 'keypress', function(ev) {
// the argument ev is the event object that has some useful information such
// as which keycode was pressed.
code_to_run;
});
Вот код более полезного примера, CharacterCounter (такой как найденный в Twitter, но, конечно, намного менее надежный;)):
var CharacterCounter = Class.create({
initialize: function(input, counter, max_chars) {
this.input = input;
this.counter = counter;
this.max_chars = max_chars;
Event.observe(this.input, 'keypress', this.keyPressHandler.bind(this));
Event.observe(this.input, 'keyup', this.keyUpHandler.bind(this));
},
keyUpHandler: function() {
words_left = this.max_chars - $F(this.input).length;
this.counter.innerHTML = words_left;
},
keyPressHandler: function(e) {
words_left = this.max_chars - $F(this.input).length;
if (words_left <= 0 && this.allowedChars(e.keyCode)) {
e.stop();
}
},
allowedChars: function(keycode) {
// 8: backspace, 37-40: arrow keys, 46: delete
allowed_keycodes = [ 8, 37, 38, 39, 40, 46 ];
if (allowed_keycodes.include(keycode)) {
return false;
}
return true
}
});