2015-05-01 14 views
5

Questo potrebbe sembrare molto ovvio per alcune persone, ma davvero non riuscivo a capire perché qualcosa di simile potrebbe accadere, quindi sto cercando qualsiasi aiuto possibile!jQuery .hide() funziona solo metà del tempo

Ho righe in espansione e ogni riga deve espandersi per mostrare i suoi dettagli quando si fa clic su o quando si preme il pulsante successivo. Mostrano e nascondono correttamente quando cliccato, ma non riesco a farlo funzionare quando viene premuto il pulsante successivo.

Questa è la parte .js:

var main = function() { 

var curQuantity1 = 0; 
var curQuantity2 = 0; 
var curQuantity3 = 0; 

$('.article').click(function() { 
    $('.description').hide(); 
    $('.article').removeClass('current'); 
    $(this).children('.description').show(); 
    $(this).addClass('current'); 
}); 

$(".next1").click(function() { 
    if (curQuantity1 + curQuantity2 + curQuantity3 == 3){ 
     console.log("Next clicked"); 

     var currentArticle = $('.current'); 
     var nextArticle = currentArticle.next(); 

     currentArticle.removeClass('current'); 
     nextArticle.addClass('current'); 

     $('.description').hide(); 
     $('.current').children('.description').show(); 
    } else { 
     alert("총 3통을 골라주세요"); 
    } 
}); 
...//code here takes care of updating curQuantity so they can add upto 3 
}; 

$(document).ready(main); 

Penso codice html incollare qui potrebbe rendere troppo lunga, ma lo farà, se necessario.

Sto vagamente indovinando che a un bambino potrebbe non essere consentito di modificare la sua classe genitore, ma non sono riuscito a trovare un modo per aggirarlo.

Grazie in anticipo per qualsiasi aiuto! Mi stavo perplesso per l'intera giornata :(

+0

non ci sono alcuna limitazione in giro l'aggiunta/rimozione classi Forse prova a ricreare il tuo problema usando [jsFiddle] (http://jsfiddle.net/), questo è il modo più semplice per aiutarti. –

+0

Il pulsante Avanti passa all'elemento successivo quando 'curQuantity1 + curQuantity2 + curQuantity3 == 3'. Ma sono tutti impostati su 0, quindi il totale è 0 e basta fare l'avviso. – Barmar

+0

@Barmar oh cambio la curQuantity nella sezione ... quando si premono i pulsanti: il log "Next clickked" viene stampato in modo sicuro;) –

risposta

2

Dal .next1 è dentro .article, quando si fa clic sul pulsante Avanti, il clic viene anche inviato l'articolo che lo contiene, a causa di evento di bubbling. Quindi, prima della .next1 . cliccare gestore sta rivelando la voce successiva, quindi il .article click rivela il vecchio articolo la soluzione è quella di utilizzare event.stopPropagation() per fermare l'evento dal bubbling out:.

$(".next1").click(function(e) { 
    e.stopPropagation(); 
    if (curQuantity1 + curQuantity2 + curQuantity3 == 3){ 
     console.log("Next clicked"); 

     var currentArticle = $('.current'); 
     var nextArticle = currentArticle.next(); 

     currentArticle.removeClass('current'); 
     nextArticle.addClass('current'); 

     $('.description').hide(); 
     $('.current').children('.description').show(); 
    } else { 
     alert("총 3통을 골라주세요"); 
    } 
}); 
+0

Oh, ecco il problema! Grazie Barmar per una spiegazione così bella - mi ha aiutato a migliorare un po 'oggi! Per chiunque abbia lo stesso problema, funziona perfettamente! –

+1

Il debugger Javascript è tuo amico, impara a usarlo. Ho semplicemente passato il codice, ho visto che si stava spostando sull'elemento successivo, quindi tornava indietro. – Barmar

+0

Lo farà! Grazie ancora! –

Problemi correlati