Manipulador De Eventos //Repositório JavaScript

Descrição

addEvent e removeEvent cross-browser.
Criado: 2005.08.13 - Modificado 2013.09.17

Código (Download)

//+ Carlos R. L. Rodrigues
//@ http://jsfromhell.com/geral/event-listener [rev. #6]

addEvent = function(o, e, f, s){
    var r = o[r = "_" + (e = "on" + e)] = o[r] || (o[e] ? [[o[e], o]] : []), a, c, d;
    r[r.length] = [f, s || o], o[e] = function(e){
        try{
            (e = e || event).preventDefault || (e.preventDefault = function(){e.returnValue = false;});
            e.stopPropagation || (e.stopPropagation = function(){e.cancelBubble = true;});
            e.target || (e.target = e.srcElement || null);
            e.keyValue = e.key = (e.which + 1 || e.keyCode + 1) - 1 || 0;
        }catch(f){}
        for(d = 1, f = r.length; f; r[--f] && (a = r[f][0], o = r[f][1], a.call ? c = a.call(o, e) : (o._ = a, c = o._(e), o._ = null), d &= c !== false));
        return e = null, !!d;
    }
};

removeEvent = function(o, e, f, s){
    for(var i = (e = o["_on" + e] || []).length; i;)
        if(e[--i] && e[i][0] == f && (s || o) == e[i][1])
            return delete e[i];
    return false;
};

Exemplo (Exemplo)

Clique em qualquer lugar.

<script type="text/javascript">
//<![CDATA[

var a = function(){
    alert("Fun??o A");
}
var b = function(){
    alert(this.name + this.message);
}
var c = function(){
    removeEvent(document, "click", a);
    removeEvent(document, "click", c);
    alert("Fun??o C removeu a fun??o A e C do onclick");
}
var params = {message: " com par?metros", name: "Fun??o B"};

addEvent(document, "click", b, params);
//removeEvent(document, "click", b, params);
addEvent(document, "click", c);
addEvent(document, "click", a);

//]]>
</script>

Ajuda

Funções

addEvent(object: Object, event: String, handler: Function(e: Event): Boolean, [scope: Object = object]): Boolean
Adiciona uma função que será disparada quando ocorrer determinado evento no objeto.
object
objeto que receberá o listener
event
nome do evento sem o prefixo "on" (click, mouseover, ...)
handler
função que será chamada quando o evento ocorrer, será enviado como argumento para esta função o objeto de evento, que além das propriedades normais, *sempre* irá conter:
  • target: objeto que gerou o evento
  • keyValue: código do caractere em eventos de teclado
  • stopPropagation: método para evitar a propagação do evento
  • preventDefault: método para evitar que a ação default ocorra
o preventDefault pode ser emulado retornando "false" na função
scope
escopo (quem o "this" irá referenciar dentro do handler) que será usado quando a função for chamada, o default é o objeto no primeiro argumento
removeEvent(object: Object, event: String, handler: function(e: Event): Boolean, [scope: Object = object]): Boolean
Remove um listener previamente adicionado em um objeto e retorna true em caso de sucesso.
object
objeto que recebeu o listener
event
nome do evento sem o prefixo "on" (click, mouseover, ...)
handler
mesma função que foi atribuida no addEvent
scope
escopo em que a função foi adicionada, caso você tenha fornecido um escopo diferente no addEvent, é necessário que você passe como parâmetro o mesmo objeto, caso contrário a remoção do evento não será realizada

Ranque (Votos: 182)

4.25