1. Window.event
【Инструкции по анализу】 сначала посмотрите на кусок кода
Кода -копия выглядит следующим образом:
Функция et ()
{
Alert (Event); // IE: [объект]
}
Результатом приведенного выше кода, работающего в IE, является [объект], но его нельзя запустить в Firefox.
Поскольку событие может использоваться непосредственно в качестве свойства оконного объекта в IE, но в Firefox используется модель W3C, которая распространяет события с помощью метода передачи параметров, то есть вам необходимо предоставить интерфейс ответа на событие для вашей функции.
[Обработка совместимости] Добавьте суждение о событии и получите правильное событие в соответствии с браузером:
Кода -копия выглядит следующим образом:
Функция et ()
{
evt = evt? evt: (window.event? window.event: null);
// Совместим с IE и Firefox
предупреждение (EVT);
}
2. Приобретение значения клавиатуры
[Анализ примечание] Методы получения значений клавиатуры от IE и Firefox различны. Можно понимать, что событие. Который под Firefox эквивалентно событию. Keycode под IE. Для различий друг друга, пожалуйста, обратитесь к «тесту совместимости для KeyCode, который и Charcode в событиях клавиатуры»
【Совместимая обработка】
Скопировать код
Кода -копия выглядит следующим образом:
Функция mykeypress (evt) {
// Совместим с IE и Firefox для получения объекта QueyboardEvent
evt = (evt)? evt: ((window.event)? window.event: "")
// Совместим с IE и Firefox для получения значения ключа объекта KeyboardEvent
var key = evt.keycode? evt.keycode: evt.which;
if (evt.ctrlkey && (key == 13 || key == 10)) {
// ctrl и enter были нажаты одновременно
// что -то делать;
}
}
3. Получение источника события
[Примечание анализа] При использовании делегатов событий мы можем определить, какой элемент происходит через получение источника событий. Однако в IE объект события имеет свойство Srcelement, но нет целевого свойства; В Firefox ровный объект имеет целевое свойство, но нет свойства Srcelement.
【Совместимая обработка】
Кода -копия выглядит следующим образом:
ele = function (evt) {// захватить объект, который действует текущее событие
evt = evt || window.event;
Возвращаться
(obj = event.srcelement? Event.srcelement: event.target;);
}
4. Мониторинг событий
[Анализ Примечание] С точки зрения прослушивания и обработки событий, IE предоставляет два интерфейса: AttactEvent и DepachEvent, в то время как Firefox предоставляет addEventListener и RemoveEventListener.
[Обработка совместимости] Простая обработка совместимости состоит в том, чтобы инкапсулировать эти два набора интерфейсов:
Кода -копия выглядит следующим образом:
Функция addEvent (elem, eventname, andler) {
if (elem.attachevent) {
elem.attachevent ("on" + eventname, function () {
handler.call (elem)});
// Использовать функцию обратного вызова () здесь, пусть это пункт Elem
} else if (elem.addeventListener) {
elem.addeventlistener (EventName, Handler, False);
}
}
функция RemoveEvent (elem, EventName, Handler) {
if (elem.detachevent) {
elem.detachevent ("on" + eventname, function () {
handler.call (elem)});
// Использовать функцию обратного вызова () здесь, пусть это пункт Elem
} else if (elem.removeeventlistener) {
elem.removeeventListener (EventName, Handler, False);
}
}
Следует отметить, что при Firefox это в функции обработки событий указывает на сам слушанный элемент, но в IE вы можете использовать вызов функции обратного вызова, чтобы дать текущий контекст указывать на прослушанный элемент.
5. Положение мыши
[Анализ примечание] В соответствии с т.е. ровным объектом есть атрибуты x и y, но нет атрибутов Pagex и Pagey; Под Firefox у ровного объекта есть атрибуты Pagex и Pagey, но нет атрибутов x и y.
[Обработка совместимости] Используйте mx (mx = event.x? Абсолютная позиция должна быть рассмотрена для сложных точек.
Кода -копия выглядит следующим образом:
функция getabspoint (e) {
var x = e.offsetleft, y = e.offsettop;
while (e = e.offsetparent) {
x += e.offsetleft;
y += e.offsettop;
}
Alert ("x:" + x + "," + "y:" + y);
}