Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Houston we have a problem.
Como já disse em outro tópico, estou isolando o JS do HTML nesse meu projeto, então criei uma função para adicionar todos os eventos e afins.
Mas então me deparei com um pequeno problema: A cada página de meu site que carrego, todas as funções serão “chamadas” novamente, mesmo aquelas que não são usadas na página visualizada. Isso acaba gerando um erro, travando todo meu JS:
Fiz a função mais ou menos assim:
window.onload=function() {
_clicksSite();
}
function _clicksSite() {
_clickGeral('idBotaoA', 'click', 'funcPagA()');
_clickGeral('idBotaoB', 'click', 'funcPagB()');
_clickGeral('idBotaoC', 'click', 'funcPagC()');
_clickGeral('idBotaoD', 'click', 'funcPagD()');
_clickGeral('idBotaoE', 'click', 'funcPagE()');
}
Então em toda página que entro a função “clicksSite” é carregada, adicionando essa seqüência de eventos. Mas se por exemplo, na página que eu entrar não houver os elementos da primeira linha da função, ela para ali e não carrega mais nada.
Pensei em colocar algum “identificador de página” com uns IF’s, onde ele só carregaria as linhas necessárias àquela página. Mas não sei se existe um “getElement” que me ajude a identificar as páginas HTML.
Uma outra alternativa que pensei foi separar o arquivo JS, então ao invés de ter somente um JS para todo o projeto, teria vários, e cada página chamaria somente o que ela iria usar. Mas não sei se essa é a solução mais correta, ou profissionalmente usada.
....alguém arrisca uma ajuda ??
t+
Ramael
@Edit: Só acrescentando mais um dado. Parece que o "window.onload" só funciona em 1 arquivo JS, acho que quando testei a primeira vez não prestei muito atenção, então se em meu arquivo “comum.js” existir um “window.onload”, ele será sobreposto pelo “window.onload” do segundo JS que carrego no meu HTML....
.... isso já está me dando dor de cabeça.....
Se estiver fazendo com server-side, ficaria mais fácil que os elementos já fossem criados com as funções amarradas a eles. Em todo caso, existem duas formas de criar um grupo de elementos.
1. Envolvendo-os em uma DIV IDentificada:
<div id="minhadiv">
<button id="botao1"></button>
<button id="botao2"></button>
<button id="botao3"></button>
<button id="botao4"></button>
</div>
2. Criando uma classe para os elementos e selecionando-os com javascript seletor de classes. Recomendo 3:
var elementos = $('.classe');
var elementos = sizzle('.classe');
var elementos = _('.classe');
Depois, basta iterar entre cada elemento da lista adicionando as funções. Para agilizar, é possível fazer com que os nomes das funções fiquem armazenadas num Array e sejam mapeadas conforme cada item da lista:
var funcoes = ['funcA', 'funcB', 'funcC'];
var elementos = document.getElementById('minhaDiv').getElementsByTagName('button');
for(var i = 0, ln = funcoes.ln; i < ln; i++) elementos[i].onclick = window[funcoes[i]];
var funcA = function(){};
var funcB = function(){};
...
Se entendi o que você quer já tive esse problema e resolvi criando uma variável em js em cada página e resgatar ela com o js mesmo... só que a única diferença foi que eu não precisava fazer uma estrutura de ifs, mas no seu caso acho que não tem como escapar muito disso.
Espero ter ajudado