Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Fala galera! Tenho a função abaixo que serve pra adicionar um evento a um determinado elemento:
var Evento = { add: function(obj, evType, fn) { if (obj.addEventListener) { obj.addEventListener(evType, fn, false); return true; } else if (obj.attachEvent) { var r = obj.attachEvent("on" + evType, fn); return r; } else { return false; } }}
Você passa como parâmetros: um objeto (o elemento afetado), tipo de evento (click, mouseover, etc) e o que acontece (funções a chamar, etc).
Eu tenho um <a> com um link qualquer. Eu adiciono um evento click a esse elemento pra ser chamada uma outra função, eu faço assim:
Evento.add(document.getElementById('idDoLink'),'click',function () { chamarfuncao() } );
Funciona! Porém, ao mesmo tempo que a função é chamada, o link também é executado, e acaba indo pra página do link. Se eu adicionasse ao onclick normalmente um 'return false' fucionaria, mas pelo addEventListener não funciona, pq se eu passar como referência uma função e dar 'return false', vai ser entendido como 'return false' pra função e não pro link, por exemplo:
Evento.add(document.getElementById('idDoLink'),'click',function () { chamarfuncao(); return false; } );
Continua indo pra outra página. Alguém tem alguma outra solução?
Pois é Fleury, o problema é que não posso fazer isso. Na verdade essa função do onclick nem sempre é executada, algumas vezes ela deve falhar, sendo assim ela deve seguir o link. Portanto, eu precisaria mesmo que no caso de a função funcionar o link não funcionasse, como eu disse ali, se colocar um return false funciona, o problema é "como colocar?"... Vlw mesmo assim.
mas veja vem, vai ser muito dificil arrumar uma solução pra isso dessa forma...quando se usa o addEventListener ou o attachEvent, você trabalha no escopo do windowquando você descreve a ação no atributo onclick do elemento html, você trabalha no escopo do elementoOu seja:return em addEventListener/attachEvent retorna resposta para windowreturn em a->onclick retorna resposta para aacho que você vai enfrentar um dilema.
Bom, na verdade eu já consegui fazer de outra maneira que funciona. Eu verifico se existe já algum evento no onclick com getAttribute e tal, e adiciono um novo evento com atrbuição normal (=) e coloco junto um eval com o valor retornado pelo getAttribute. Funciona, porém eu achei que ficou gambiarra demais, por isso eu estava estudando fazer a mesma coisa com addEventListener e attachEvent. De qualquer maneira, agradeço pela ajuda, pelo menos deu pra ver que realmente não dá pra fazer hehe. http://forum.imasters.com.br/public/style_emoticons/default/joia.gif
Já tem muito tempo desse post, mais estava tentando resolver o mesmo problema, e achei uma solução mais facil.
Basta adicionar as seguintes linhas na função que é executado no onclick do elemente:
CODE
function onClick(event){
// seu codigo
event.preventDefault();
return false;
}
vai ter de trocar o link no onload da página para não interferir na sua função.
function limpaLinks() { var links = document.getElementById("meuMenu").getElementsByTagName("a"); for (var i = 0; i < links.length; i++) links[i].href = "#" + links[i].href;}