Jump to content

Archived

This topic is now archived and is closed to further replies.

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

Share this post


Link to post
Share on other 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);
	};

Share this post


Link to post
Share on other 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!

Share this post


Link to post
Share on other sites

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.