Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

renanfog

Problemas com eventos (handlers - attachEvent, addEventListener)

Recommended Posts

E ae pessoal do Imasters!

 

Seguinte, estou com um problema meio chato, que vira e mexe me atrapalha mas nem sempre consigo resolver, queria uma solução final..

 

Imaginem que tenho a seguinte função besta para adicionar handlers de eventos..

 

function adicionaEvento(obj, funcao, evento){		if (window.addEventListener)			obj.addEventListener(evento, funcao, true);		else if (window.attachEvent)				obj.attachEvent("on"+evento, funcao);	}

Beleza... até ai tranquilo

Mas por exemplo, e se eu estou num loop e quero que em cada objeto, seja passado por exemplo um valor diferente pra função, eu faço de duas maneiras:

 

adicionaEvento(document.getElementById("objeto"), function() { funcaoA('renan'); }, "click");adicionaEvento(document.getElementById("objeto"), new Function("funcaoA('renan');"), "click");

 

Procuro usar sempre a primeira, acho meio porco usar new Function

 

Mas dai vem o problema.. se quero nos browsers decents pegar as variáveis de evento, eu não consigo..

por exemplo, se eu passo

 

function() { funcaoA('renan', event);
ou

new Function("funcaoA('renan', event);")

ele não entende na função os parâmetros do evento, isso é meio óbvio pq estou criando funções novas para cada um dos eventos que eu adiciono.

 

 

Alguém sabe como posso solucionar isso?? Alguma dica final de como trabalhar com isso?

 

Agradecido..

Renan

Compartilhar este post


Link para o post
Compartilhar em outros sites

nao entendi muito bem.você quer nviar os parâmetros juntamente com a chamada para criação da função ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, é bem simpleseu to adicionando handlers de eventos para vários objetos, só q imagina q eu to reconfigurando 20 links da pagina, para cada um eu quero passar um valor diferente pra função, tipo 1 pro primeiro, 2 pro segundo..até ai belezao problema é q os browsers complacentes com os padrões não tem a m***** do window.event global, ele passa os valores do evento (posição do mouse, tecla pressionada, etc) como parametro pra função.. Mas adicionando esses handlers, eu não to conseguindo enviar esses valores pra função que o evento chama..Esse é o meu problema, alguem tem alguma solução???

Compartilhar este post


Link para o post
Compartilhar em outros sites

bem, eu fiz um pouco diferente que você mas a função reconhece os valores que eu passo :

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /><title>Untitled Document</title></head><body><script language="javascript" type="text/javascript">var letras = new Array("a", "b", "c", "d", "e");var numeros = new Array("0", "1", "2", "3", "4");function vai(a){  alert(a);}for(var x = 0; x < letras.length; x++){  document.write("<button onclick=\"vai('" + numeros[x] + "')\" onmouseover=\"vai('" + letras[x] + "')\">" + letras[x] + "</button><br />");}</script></body></html>

só não sei se esse jeito que eu faço vai de acordo com os padrões...mas de qualquer jeito a função reconhece os valores que são passados para ela em cada um dos diferentes eventos ocorridos sobre um objeto button.

flws!

Compartilhar este post


Link para o post
Compartilhar em outros sites

ééé cara, desse jeito funciona mas não é legaldocument.write entrou em desuso e acho q futuramente não vai ser reconhecido pelos browserseu to fazendo um projeto inteiro com javascript não obstrusivo, então não coloco o onclick e afins em nenhuma tag, num ficheiro externo eu configuro todos os elementos da pagina usando esses handlers, assim no meu xhtml só fica o conteudo em sipor isso q eu preciso passar as variaveis de evento desse jeito... mas ainda não conseguivaleu galera, qualquer sugesta é bem-vinda!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

você não tentou criar uma tag diferente pros teus elementos?por exemplo, na tua função funcaoA('renan')com isso você quer que o valor 'renan' esteja presente no objeto que chama a função.então porque você não cria nessa tag que vai ter o evento, uma propriedade inexistente, por exemplo, tmpVal, e seta o valor dessa propriedade quando você seta a função, aí dentro da função você acessaria o valor através de this.getAttribute('tmpVal').diz aí se dá boa ou não!flws!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para ter o event em qualquer browse, declare sua função enviando um parametro que, por convenção é chamado de 'e'. O evento estará sempre nesse parametro:adicionaEvento(document.body, "click", function (e) { alert(e.srcElement || e.target) });

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.