Ir para conteúdo

Arquivado

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

ismavolk

'Impossível' de fazer com JavaScript não obstrutivo

Recommended Posts

Olá pessoal, sou novo no forum, primeiramente parabéns a todos daqui, pois sempre que tenho dúvidas encontro as soluções

no imasters e obrigado a todos que puderem me ajudar.

 

Pois bem... estou com um problema para acessar elementos HTML com javascript.

Vou exemplificar pra ficar claro...

Oq preciso saber, é qual das td foi clicada, estou fazendo com javascript não obstrutivo e usando a prototype.js.

<html>
...
 <tr>
   <td id='bla1' class='teste'>1</td>
   <td id='bla2' class='teste'>2</td>
   <td id='bla3' class='teste'>3</td>
 </tr>
...

Na verdade, eu não sei quantas dessas tds vão existir, pois são geradas dinamicamente pelo PHP, então para saber a quantidade eu conto quantas existem, pela classe delas, assim:
var arr_tds = $$( 'td.teste' );
var quant_td = arr_tds.length;
for( i=0; i < quant_td; i++){
   arr_tds[ i ].onclick = function(){ alert( i ); };
}
O problema, é q em qualquer td que eu clique, vai exibir o numero 3! e não 1 se eu clicar no 1, 2 se eu clicar no 2 e 3 se clicar no 3.

Não consegui solucionar isso com javascript não obstrutivo, apenas fazendo o PHP ecrever o javascript dentro de cada td, dai no onclick dela vai exibir certo, mas

não é uma solução digamos.. 'elegante'!

 

Já tentei com event.observe... da prototype, tbm não deu certo.

 

Se alguém tiver uma luz para me dar fique a vontade, e agradeço desde já a colaboração de todos!

 

Abraço!!

 

editado por Otata 23/01/2009 15:45

Compartilhar este post


Link para o post
Compartilhar em outros sites

se for para pegar o index da TD pode fazer assim.

 

for( i=0; i < quant_td; i++){
		   arr_tds[ i ].onclick = function(){ 		
			alert(this.cellIndex);
	};

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Otata, obrigado pelo help,

Consegui resolver o problema com uma solução semelhante a sua. A minha dúvida era pq estou fazendo um calendario, e exibo os dias dos meses anterior e os do próximo mês também, assim como estes calendários de parede, que se o dia 1 do mês atual começa numa quarta-feira, são exibidos os dias 29, 30 e 31 do mês anterior nos espaços referentes a domingo, segunda e terça-feira respectivamente.

Como eu precisava do dia que foi clicado, criei uma classe para os dias do mes anterior, uma para o mes atual e outra para o mes posterior, faço um loop nas tds de cada classe, pegando seus id, coloquei como id das tds o seguinte, para as tds do mes anterior( antx ) onde x é o numero correspondente ao dia, tds mes atual(atux) e as tds do proximo mes(posx), assim tenho como saber os dias que foram clicados pela id da td.

Fiz o seguinte...

 

var arr_dias = $$("td.dias_mes_anterior");

var quant_dias = arr_dias.length;

var i = 0;

for( i = 0; i < quant_dias; i++ ){

arr_dias[ i ].onclick = function( e ){ alert( e.target.id ); };

}

 

var arr_dias = $$("td.dias_mes_atual");

var quant_dias = arr_dias.length;

var i = 0;

for( i = 0; i < quant_dias; i++ ){

arr_dias[ i ].onclick = function( e ){ alert( e.target.id ); };

}

 

var arr_dias = $$("td.dias_mes_posterior");

var quant_dias = arr_dias.length;

var i = 0;

for( i = 0; i < quant_dias; i++ ){

arr_dias[ i ].onclick = function( e ){ alert( e.target.id ); };

}

 

 

Abraço!

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.