← Javascript

Evento Click dentro de Loop

Lida 3419 vezes

Offline

Pedro Magalhães 
Membro
Mensagens 397 Gostos 0
Troféus totais: 23
Trófeus: (Ver todos)
Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Level 4 Level 3 Level 2 Level 1 100 Posts

Olá Pessoal!

Estou aqui com uma situação a qual ainda não consegui resolver e precisava da vossa ajuda.
Estou a criar um 'for loop', e dentro desse 'for', estou a registar por cada iteração, um evento 'click'.
No entanto, o que está a acontecer é que o evento 'click' só funciona 1 vez e na última iteração.
Neste caso em específico preciso que ele registe 5 eventos 'click' diferentes e não apenas 1.

Se alguém me souber ajudar agradeço.

Abraço

Código: [Seleccione]
$(document).ready(function() {

    $num_mod_links = $('.mod_links_footer').length;

for($count=1; $count<=$num_mod_links; $count++){

$('.mod_links_content.'+$count+' ul li:gt(2)').hide();

$('a.hide_link.'+$count).hide();

$('.mod_links_footer.'+$count+' a:eq(0)').click(
function() {
$('.mod_links_content.'+1+' ul li:gt(2)').slideDown('normal');
$('a.hide_link.'+1).show();
$('a.show_link.'+1).hide();
}
);

}

});

Offline

Jota 
Editor
Mensagens 773 Gostos 0
Feedback +1

Troféus totais: 27
Trófeus: (Ver todos)
Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Level 5 Level 4 Level 3 Level 2 Level 1

Boas Pedro,

Podes também dar um exemplo do HTML? Para ser um pouco mais fácil saber o que estas a tentar fazer.

E que eu estou a tentar perceber o que estas a fazer e tenho umas quantas perguntas.

Os elementos já estão na pagina ou são criados depois do loading? Se são criados em "fly" tens que usar o .live

Porque não também usar:

http://api.jquery.com/attribute-starts-with-selector/

Em vez de usares o for loop.

Espero ter ajudado
Offline

Pedro Magalhães 
Membro
Mensagens 397 Gostos 0
Troféus totais: 23
Trófeus: (Ver todos)
Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Level 4 Level 3 Level 2 Level 1 100 Posts

Os elementos já estão na página. O javascript é usado num ficheiro à parte.

Aqui vai um módulo com links, onde no footer ha um link +/- informações

Código: [Seleccione]
<div class="mod_links">
    <div class="mod_links_top"><h2>Módulo de Links</h2></div>
    <div class="mod_links_content 1">
        <ul>
            <li><a href="index.html" title="Titulo">Link</a></li>
            <li><a href="index.html" title="Titulo">Link</a></li>
            <li><a href="index.html" title="Titulo">Link</a></li>
            <li><a href="index.html" title="Titulo">Link</a></li>
            <li><a href="index.html" title="Titulo">Link</a></li>
            <li><a href="index.html" title="Titulo">Link</a></li>
        </ul>                                                                                              
    </div>
    <div class="mod_links_footer 1">
        <a href="#" class="show_link 1" title="+ Informações" ><span>+</span> Informações</a>
        <a href="#" class="hide_link 1" title="- Informações" ><span>-</span> Informações</a>
    </div>
</div>

Este bloco é invocado mediante o numero de modulos de links que tiverem a ser activados na base de dados. Semalhante a widgets.
Por defeito, estao apenas os 3 primeiros links visiveis no 'mod_links_content'. E os outros restantes ocultos.
Assim que se clica no 'show_link', aparecem os restantes links no 'mod_links_content'. Semelhante a um accordion.
Nota: '1' é o id do modulo.

Vou agora dar uma vista de olhos no link que enviaste JOTA. Thks
Offline

Jota 
Editor
Mensagens 773 Gostos 0
Feedback +1

Troféus totais: 27
Trófeus: (Ver todos)
Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Level 5 Level 4 Level 3 Level 2 Level 1

Tenta isto:

Código: [Seleccione]
$(document).ready(function() {

   $(".mod_links_content").each(function(){
    $(this).find("ul li:gt(2)").hide();
   });

   $(".show_link").click(function(){
    $(this).parent().prev().find("ul li:gt(2)").slideDown('normal');
   });
   
   $(".hide_link").click(function(){
    $(this).parent().prev().find("ul li:gt(2)").slideUp('normal');
   });

});
Offline

Pedro Magalhães 
Membro
Mensagens 397 Gostos 0
Troféus totais: 23
Trófeus: (Ver todos)
Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Level 4 Level 3 Level 2 Level 1 100 Posts

Funcionou na perfeição!
Falta-me só agora jogar com a visibilidade dos links + e - à medida que se clica e fica ok.
Obrigado ;)
Offline

Jota 
Editor
Mensagens 773 Gostos 0
Feedback +1

Troféus totais: 27
Trófeus: (Ver todos)
Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Level 5 Level 4 Level 3 Level 2 Level 1

Bacano :)

Eu não sei se podes mudar o html do modulo de links, se poderes sugiro apenas um link onde depois só mudas a class e o texto do link.
Offline

Pedro Magalhães 
Membro
Mensagens 397 Gostos 0
Troféus totais: 23
Trófeus: (Ver todos)
Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Level 4 Level 3 Level 2 Level 1 100 Posts

:) O ideal é ter apenas um link. Talvez use o toggleClass...
Offline

Pedro Magalhães 
Membro
Mensagens 397 Gostos 0
Troféus totais: 23
Trófeus: (Ver todos)
Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Level 4 Level 3 Level 2 Level 1 100 Posts

Ok. Já está tudo a funcionar. Obrigado JOTA ;)
Offline

Jota 
Editor
Mensagens 773 Gostos 0
Feedback +1

Troféus totais: 27
Trófeus: (Ver todos)
Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Level 5 Level 4 Level 3 Level 2 Level 1

Bacano. Não tem problema.