addEvent http://www.scottandrew.com

12 views
Skip to first unread message

Jorge Krug

unread,
Aug 31, 2005, 12:11:53 PM8/31/05
to ar...@googlegroups.com
Estou com o seguinte problema:

Tenho uma pagina que tem dois frames (nao fui eu que quis assim,
portanto...). O frame principal, topo, deve ficar "vigiando" se o frame de
"conteudo" muda. Se mudar, uma funcao muda uma imagem no frame "topo".

Então, estou usando:

function addEvent(elm, evType, fn, useCapture)
{
if (elm.addEventListener){
elm.addEventListener(evType, fn, useCapture);
return true;
} else if (elm.attachEvent){
var r = elm.attachEvent("on"+evType, fn);
return r;
} else {
alert("Handler could not be removed");
}
}

Que peguei em:

http://www.scottandrew.com/weblog/articles/cbs-events

Essas outrs funcionam normal:

addEvent(window,'load', ajusta_menu, false);
addEvent(window, 'resize', ajusta_menu, false);
addEvent(window, 'load', mostradatabrasilia, false);
addEvent(window, 'load', myimages, false);

Mas a do bendito frame, não rola.

addEvent(top.frames['conteudo'], 'change', banners, true);

Alguém pode dar uma força?

Obrigado

JK

Jonas Raoni

unread,
Aug 31, 2005, 12:17:23 PM8/31/05
to ar...@googlegroups.com
On 8/31/05, Jorge Krug <merc...@gmail.com> wrote:
> function addEvent(elm, evType, fn, useCapture)
meu colega fez um mais extensível
[http://www.jsfromhell.com/Geral/event-listener], dae eu dei umas
mexidas e agora prefiro usar ele XD

> Mas a do bendito frame, não rola.
> addEvent(top.frames['conteudo'], 'change', banners, true);

q eu saiba não existe evento onchange pra frames, tenta o onload ;]


--
"Invente, Tente!!! Faça um código eficiente" (Jonas Raoni)

Jonas Raoni Soares Silva
---------------------------
Desenvolvedor de aplicações
jonasraoni at gmail dot com
http://www.jsfromhell.com

diego nunes

unread,
Aug 31, 2005, 12:19:35 PM8/31/05
to ar...@googlegroups.com
"change"? "onChance"? Esse evento não dispara pra objetos do tipo
"window", não adianta. Monitore coisas como o "unload", "load", ou
coisas do tipo.
--
~~ ~
diego nunes
web engineer
~ ~~

Jorge Krug

unread,
Aug 31, 2005, 2:23:27 PM8/31/05
to ar...@googlegroups.com
Mas como eu faço para que a função "veja" que o conteúdo do frame
"conteúdo" mudou?

Com uma função recursiva? Eu tentei, mas o JS avisa para um excesso de
recursão:


addEvent(window, 'load', banners, true);

function banners()
{
if(top.frames['conteudo'].location.href.indexOf("entenda.html") !=
-1){
alert('sim');
}
banners();

diego nunes

unread,
Aug 31, 2005, 2:26:37 PM8/31/05
to ar...@googlegroups.com
Por que simplesmente não fica checando o location.href, e talz?
(não, isso não é uma função recursiva...)
Se quiser, cheque o onunload e o onload. Acho que são os dois
únicos indicadores úteis, nesse caso -- mas eles ficam no documento, e
não na janela (ou seja, a cada troca de página, você precisaria os
redefinir).

Amplexos.

Jorge Krug

unread,
Aug 31, 2005, 2:43:01 PM8/31/05
to ar...@googlegroups.com
É que quero centralizar num único arquivo. Aí, vai ter um banner padrão,
para todas as páginas, e outros que vao mudar apenas para determinadas
páginas que sejam carregadas no frame "conteúdo" .

Isso aqui parece funcionar:

function banners()
{

if(top.frames['conteudo'].location.href.indexOf("entenda.html") != -1){

top.frames['topo'].document.getElementById('bannerpos1').style.display =
"none";

top.frames['topo'].document.getElementById('bannerpos2').style.display =
"block";
}
setTimeout("banners()",1000);
}

De um em um segundo ela checa o conteúdo do frame "conteudo", e troca as
imagens conforme o que esteja carregado nele...

Mas eu gostaria que fosse amarrado ao evento da troca de frames, assim achei
meio porco...

JK

Marlon Quandt

unread,
Aug 31, 2005, 2:51:32 PM8/31/05
to ar...@googlegroups.com
Eu colocaria a função que faz sei lah o q centralizada e chamava ela a
partir das outras páginas no onload....

-----Mensagem original-----
De: ar...@googlegroups.com [mailto:ar...@googlegroups.com] Em nome de Jorge
Krug
Enviada em: quarta-feira, 31 de agosto de 2005 15:43
Para: ar...@googlegroups.com
Assunto: arqHP:: Re: addEvent http://www.scottandrew.com

Jorge Krug

unread,
Aug 31, 2005, 2:55:38 PM8/31/05
to ar...@googlegroups.com
Mas já está assim, e é isso que quero evitar, por uma questão de manutenção.


> -----Original Message-----
> From: ar...@googlegroups.com [mailto:ar...@googlegroups.com]

Marlon Quandt

unread,
Aug 31, 2005, 2:59:39 PM8/31/05
to ar...@googlegroups.com
Como assim questão de manutenção?!?

Outra coisa que você poderia usar era o tal do
<script type="text/javascript" src="../../js/util.js"></script>

Sei lá, posso estar falando besteira, não entendi ao certo o que vc quer
fazer!

-----Mensagem original-----
De: ar...@googlegroups.com [mailto:ar...@googlegroups.com] Em nome de Jorge
Krug
Enviada em: quarta-feira, 31 de agosto de 2005 15:56
Para: ar...@googlegroups.com
Assunto: arqHP:: Re: addEvent http://www.scottandrew.com


Jorge Krug

unread,
Aug 31, 2005, 3:26:30 PM8/31/05
to ar...@googlegroups.com
Tem um frame chamado topo, onde vao os banners, e um frame de conteúdo.

Os banners mudam coforme as páginas que são carregadas no conteúdo:

Tipo, se a página é pagina1.asp, entao o banner é pagina1.png, e por aí vai.

Mas tem um banner padrão.

O que eu quero fazer é controlar tudo de um unico js, que é carregado no
topo, assim nao preciso botar o evento no load das outras páginas, e nem de
novas que forem sendo acrescentadas:

Até agora tá assim:

function banners()
{
var str = top.frames['conteudo'].location.href;
str = str.substr(str.lastIndexOf('/')+1);
var bannerpos1 =
top.frames['topo'].document.getElementById('bannerpos1');
var bannerpos2 =
top.frames['topo'].document.getElementById('bannerpos2');
var bannerflash =
top.frames['topo'].document.getElementById('bannerflash');
var bannerimage =
top.frames['topo'].document.getElementById('bannerimage');
switch (str){
case 'entenda.html':
bannerpos1.style.display = "none";
bannerpos2.style.display = "block";
break;
default:
bannerpos1.style.display = "block";
bannerpos2.style.display = "none";
bannerflash.style.display = "block";
bannerimage.style.display = "none";
}
setTimeout("banners()",1000);
}

Tá funcionando, mas acho esse setTimeout meio gambiarra... Acho que o JS
deveria ficar "escutando" o conteúdo do frame conteúdo sem o setTimeout, mas
nao sei fazer isso.

Rafael Trindade da Silva

unread,
Jul 1, 2006, 10:22:57 PM7/1/06
to ar...@googlegroups.com
Pessoal,

Dando uma olhada nas mensagens do grupo, encontrei esta.
Agora gostaria de saber se teria como simular a entrada de parametros de funcoes para adicionar eventos, como seria ?

Abraços.
--
Rafael Trindade da Silva
rafa...@gmail.com
http://rafaeltrindade.com.br

Jonas Raoni

unread,
Jul 1, 2006, 10:55:45 PM7/1/06
to ar...@googlegroups.com
On 7/1/06, Rafael Trindade da Silva <rafa...@gmail.com> wrote:
> Dando uma olhada nas mensagens do grupo, encontrei esta.
> Agora gostaria de saber se teria como simular a entrada de parametros de
> funcoes para adicionar eventos, como seria ?
>
> On 8/31/05, Jonas Raoni <jonas...@gmail.com> wrote:

oloko kkkkkkkkkkk, mensagem de 2005! daqui 2 meses já ia fazer níver haha

já perguntaram isso na outra lista umas 4 vezes, segue abaixo a cópia
do email q eu mandei, vê se ajuda =b

Victor Cavalcante wrote:
> Alguem sabe me dizer se tem como passar parametros para essa funcao que
> vai ser adicionada?

Só via gambiarrinha =bbb

#1. Usando o addEvent que tem no meu site
<URL:http://jsfromhell.com/geral/event-listener> (marketing haha xD)

function meuOnClick(e){
alert("argumentos:" + this.a + this.b);
}

//adicionar
var x = {a: "Jonas", b: " matador de rato"};
addEvent(document, "mousedown", meuOnClick, x);

//remover
//removeEvent(document, "mousedown", meuOnClick, x);

#2. Usando o "addEvent padrão"

//f = função (o primeiro argumento será o objeto de evento)
//host = objeto q será usado como "this" na função...
//args = daqui pra frente, enfia os argumentos q a função vai receber haha
function makeHandler(f, host, args){
return args = [].slice.call(arguments, 1), function(e){
return args[0] = e, f.apply(host, args);
};

}

function meuOnClick(e, a, b){
alert("argumentos:" + a + b);

}

//adicionar
x = makeHandler(meuOnClick, document, "Jonas ", "matador de rato");
addEvent(document, "mousedown", x);

//remover
//removeEvent(document, "mousedown", x);


--
Jonas Raoni Soares Silva
http://www.jsfromhell.com

Rafael Trindade da Silva

unread,
Jul 2, 2006, 5:58:47 PM7/2/06
to ar...@googlegroups.com
Valeu Jonas, vai servir sim cara.
Obrigado.

Reply all
Reply to author
Forward
0 new messages