[RESOLVIDO]vRaptor - forEach repetindo ID

Isso mesmo. Pode usar o hasClass do jQuery:

http://api.jquery.com/hasClass/

ah, verdade, deixa eu implementar aqui e efetuar testes, qualquer coisa quando empacar aqui volto.

mais ai vai ter um probleminha.

atualmente eu faço o seguinte:

ou seja, ele ja vai setar a imagem inicial se for true ou não.

da forma que estamos fazendo, não tem uma “logica” para setar, de forma que TODOS vão começar com a primeira imagem que no caso é botao vermelho.

há ideia é que começasse com o img setando essa parte: /objeto_ativo_${usuario.ativo}.png

e depois fizesse esse jogo de moficiaçoes, pq caso contrario se deixar da seguinte maneira:

<td class="activeDesactive">
					<a class="updateRow icon-editable" href="#">
						
					</a>				
				</td>

quando inicialmente ele for fazer o ForEach, como vai setar inicialmente a imagem se ele em momento algum sabe se é true ou false para setar o inativo ou nao. a unica maneira que pensei aqui agora é fazer o seguinte:

<c:if test="{usuario.ativo}"> //true 
<td class="activeDesactive">
					<a class="updateRow icon-editable active" href="#">

					</a>				
</td>

</c:if>

<c:if test="{usuario.ativo}"> //false 
<td class="activeDesactive">
					<a class="updateRow icon-editable inactive" href="#">

					</a>				
</td>

</c:if>

obs estou usando active e inactive no class somente para ilustrar a situação, no caso é só a inserção do inativo ou remoçao da mesma class.

e depois que está setado e a modificaçao é visual, ai entraria o script, alguma ideia?

Que tal o operador ternário??

[code]<c:if test="{usuario.ativo}"> //true
<td class=“activeDesactive”>
<a class=“updateRow icon-editable active” href="#">

                &lt;/a&gt;                

</td>

</c:if>

<c:if test="{usuario.ativo}"> //false
<td class=“activeDesactive”>
<a class=“updateRow icon-editable inactive” href="#">

                &lt;/a&gt;                

</td>

</c:if> [/code]
Fica assim:

[code]
<td class=“activeDesactive”>
<a class=“updateRow icon-editable ${usuario.ativo ? ‘active’ : ‘inactive’}” href="#">

                &lt;/a&gt;                

</td> [/code]

show de bola cara, não sabia que podia fazer isso. UAHSUAHs, vivendo e aprendendo.

seguinte, a parte lógica inicial para mostrar as imagens já está funcionando.

vou partir agora para corrigir o javascript e ver se está funcionando corretamente.


edit:

então rafael, meu codigo ficou da seguinte maneira:

$(document).ready(function() {
		$('.updateRow').click(function(){
			  var self = $(this);
			  var td = self.closest('td').index(); //provavelmente nao será mais usado.
			  var tr = self.parents('tr'); //provavelmente tbm nao será mais usado
			  var codigo = self.parents('td').siblings('.pCodigo').html();
		      $.ajax({ 
		    	 url:'<c:url value="/usuario/ativar/" />'+codigo,
		    	 type: 'POST',
		         success:function(){	        		 
		        	 if(self.hasClass('ativo')) {
		        		 //preciso primeiro remover ativo para adcionar o inativo?
		        		 self.addClass('inativo');
                     } 
		        	 if(self.hasClass('inativo')) {
		        		 //preciso primeiro remover inativo para adicionar ativo?
                    	 self.addClass('ativo');
                     }        
		         },  
		         error:function(){
		            alert('Erro');
		         }  
		      });  
		   });
	});

seguinte rafael, está funcionando sim, porem só o primeiro click, no segundo ele ja nao muda o icone.

$(document).ready(function() {
		$('.updateRow').click(function(){
			  var self = $(this);
			  var td = self.closest('td').index(); //provavelmente nao será mais usado.
			  var tr = self.parents('tr'); //provavelmente tbm nao será mais usado
			  var codigo = self.parents('td').siblings('.pCodigo').html();
		      $.ajax({ 
		    	 url:'<c:url value="/usuario/ativar/" />'+codigo,
		    	 type: 'POST',
		         success:function(){	        		 
		        	 if(self.hasClass('ativo')) {
		        		 self.removeClass('ativo');
		        		 self.addClass('inativo');
                     } 
		        	 if(self.hasClass('inativo')) {
		        		 self.removeClass('inativo');
                    	 self.addClass('ativo');
                     }        
		         },  
		         error:function(){
		            alert('Erro');
		         }  
		      });  
		   });
	});

Vamos lá…

Use somente uma classe e coloque uma no default… e ai você usa o toggle do jquery, ele vai trocar para você.

Sugiro você trocar a imagem antes de acionar o ajax. Assim o user tem a sensação de velocidade…

Tente descobrir o porque só estar funcionando no primeiro click… Ele está indo para o server? Está inativando/ativando o registro?

fiz a seguinte modificação e está funcionando corretamente com 1 ou N clicks. xD

$(document).ready(function() {
		$('.updateRow').click(function(){
			  var self = $(this);
			  var codigo = self.parents('td').siblings('.pCodigo').html();
		      $.ajax({ 
		    	 url:'<c:url value="/usuario/ativar/" />'+codigo,
		    	 type: 'POST',
		         success:function(){	        		 
		        	 if(self.hasClass('inativo')) {
		        		 self.removeClass('inativo');
                     } else {
                    	 self.addClass('inativo');
                     }       
		         },  
		         error:function(){
		            alert('Erro');
		         }  
		      });  
		   });
	});
<td class="activeDesactive">
	<a class="updateRow icon-editable ${usuario.ativo ? '' : 'inativo'}" href="#"></a>				
</td>

quanto a trocar a imagem antes do ajax, como ficaria? no caso dentro de success não teria nenhuma informação?

Isso mesmo, dentro do success não teria nada. USE O TOGGLECLASS que eu mostrei em cima…

Sugiro vc colocar o toggleclass no error também, assim, quando der erro, vc volta para o que estava.

no caso toggleClass no lugar do remove class e add CLass? mais tipo, so preciso colocar toggleClass no error, se a mudança estiver fora do sucess correto?

Sim.

Sim.

eu acho melhor deixar no success mesmo, pq garante que a informação foi realmente modificada, e a diferença não é tão bruta assim.

vou partir para o editar usuário, vai ser uma nova aventura kkAUSHAUsh

obrigado pela ENORME ajuda.

um ultimo probleminha:

possuo o seguinte javascript:

$(document).ready(function(){ $('#addEmpresa').on('click', function(){ var self = $('#codigoDaEmpresa'); var selecionado = self.val(); // pega o codigo digitado no input $.ajax({ url:'<c:url value="/usuario/addEmpresaTemp/" />'+selecionado, type: 'POST', dataType:'json', success:function(data){ var options = []; for (var i = 0; i < data.length; i++) { options.push('<tr>'); options.push('<td class="pCodigo">'+data[i].codigo+'</td>'); options.push('<td>'+data[i].descricao+'</td>'); options.push('<td>'+data[i].cnpj+'</td>'); options.push('<td style="text-align:center;">'+ '<a style="text-align:center;" class="deleteRow" href="#">'+ '<img alt="Excluir Empresa" src="<c:url value="/resources/img/icons/lixeira.png"/>">'+ '</a>'+ '</td>'); options.push('</tr>'); } $('#povoarEmpresa').html(options.join('')); }, error:function(){ alert('Erro'); } }); }); });

se vc prestar atenção estou montando nessa pagina esse td

options.push('<td style="text-align:center;">'+ '<a style="text-align:center;" class="deleteRow" href="#">'+ '<img alt="Excluir Produto" src="<c:url value="/resources/img/icons/lixeira.png"/>">'+ '</a>'+ '</td>');
que será um icone para excluir a linha dessa tabela.

podem quando monta, ele fica tudo direitim como tem que ficar, porem quando eu clico nessa imagem era pra acionar o seguinte javascript:

// remover empresa da tabela e da lista $(document).ready(function() { $('.deleteRow').click(function(){ var self = $(this); var tr = self.closest('tr'); var codigo = self.parents('td').siblings('.pCodigo').html(); $.ajax({ url:'<c:url value="/usuario/delEmpresaTemp/" />'+codigo, type: 'POST', success:function(){ alert('chegou'); tr.remove(); }, error:function(){ alert('Erro'); } }); });

coloquei pra debugar e ele nao está acionando esse javascript