1. Window.Event
【Instruções de análise】 Veja um pedaço de código primeiro
A cópia do código é a seguinte:
função et ()
{
alerta (evento); // ou seja: [objeto]
}
O resultado do código acima em execução no IE é [objeto], mas não pode ser executado no Firefox.
Como o evento pode ser usado diretamente como propriedade de um objeto de janela no IE, mas no Firefox, o modelo W3C é usado, que propaga eventos através do método de passagem de parâmetros, ou seja, você precisa fornecer uma interface de resposta a eventos para sua função.
[Processamento de compatibilidade] Adicione o julgamento do evento e obtenha o evento correto de acordo com o navegador:
A cópia do código é a seguinte:
função et ()
{
EVT = EVT? EVT: (Window.Event? Window.Event: NULL);
// Compatível com IE e Firefox
alerta (EVT);
}
2. Aquisição do valor do teclado
[Observação da análise] Os métodos de obtenção de valores de teclado do IE e Firefox são diferentes. Pode -se entender que o evento. Que sob o Firefox é equivalente ao evento. Para as diferenças um do outro, consulte "Teste de compatibilidade para o KeyCode, que e Charcode em eventos do teclado"
【Processamento compatível】
Copie o código
A cópia do código é a seguinte:
função myKeypress (evt) {
// Compatível com o IE e o Firefox para obter o objeto de teclado
EVT = (EVT)? EVT: ((Window.Event)? Window.Event: "")
// Compatível com o IE e o Firefox para obter o valor da chave do objeto de teclado
var key = evt.Keycode? Evt.KeyCode: Evt.Which;
if (evt.ctrlkey && (key == 13 || key == 10)) {
// Ctrl e Enter foram pressionados ao mesmo tempo
// Faça algo;
}
}
3. Obter fonte de evento
[Nota de análise] Ao usar os delegados de eventos, podemos determinar qual elemento o evento vem da aquisição da fonte do evento. No entanto, no IE, o objeto de evento possui uma propriedade SRCELEMENT, mas nenhuma propriedade de destino; No Firefox, o objeto uniforme possui uma propriedade de destino, mas nenhuma propriedade SRCELEMENT.
【Processamento compatível】
A cópia do código é a seguinte:
ele = função (evt) {// captura o objeto que o evento atual está atuando
evt = evt || window.event;
Retornar
(obj = event.srcelement? Event.srcelement: event.target;);
}
4. Monitoramento de eventos
[Nota de análise] Em termos de escuta e processamento de eventos, o IE fornece duas interfaces: AnexeEvent e Detachevent, enquanto o Firefox fornece addEventListener e removeeventListener.
[Processamento de compatibilidade] O processamento de compatibilidade mais simples é encapsular esses dois conjuntos de interfaces:
A cópia do código é a seguinte:
função addEvent (elem, eventname, manipulador) {
if (elem.attachevent) {
elem.attachevent ("on" + eventName, function () {
handler.call (elem)});
// Use a chamada de função de retorno de chamada () aqui, deixe este ponto para elem
} else if (elem.addeventListener) {
elem.addeventListener (EventName, Handler, false);
}
}
função removervent (elem, eventname, manipulador) {
if (elem.detachevent) {
elem.detachevent ("on" + eventname, function () {
handler.call (elem)});
// Use a chamada de função de retorno de chamada () aqui, deixe este ponto para elem
} else if (elem.removeEventListener) {
Elem.removeEventListener (EventName, Handler, False);
}
}
Deve -se notar que, sob o Firefox, isso na função de manuseio de eventos aponta para o próprio elemento ouvido, mas no IE, você pode usar a chamada de função de retorno de chamada para permitir que o contexto atual aponte para o elemento escuta.
5. Posição do mouse
[Nota de análise] No IE, o objeto uniforme possui atributos X e Y, mas não há atributos PageX e Pagey; Sob o Firefox, o objeto uniforme possui atributos PageX e Pagey, mas nenhum atributo X e Y.
[Processamento de compatibilidade] Use Mx (mx = event.x? Event.x: event.pagex;) para substituir o evento.x sob o ie ou event.pagex sob o firefox. A posição absoluta deve ser considerada para pontos complexos.
A cópia do código é a seguinte:
função getabspoint (e) {
var x = e.offsetLeft, y = e.offsetTop;
while (e = e.offsetParent) {
x += e.offsetLeft;
y += e.OffSettop;
}
alerta ("x:" + x + "," + "y:" + y);
}