Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Selettori gerarchici classe e id

    Ho un problema sui selettori...

    codice:
    $(".content_option_dati_contenutocasella > #toggle_option_contenutocasella").click(function(){
    			alert('testo');
    			if($('~ #toggle_option_contenutocasella',this).attr('class')=='fa fa-caret-square-o-down'){
    			   $('~ .content_list_option_dati_contenutocasella',this).show('fast');
    			   $('~ #toggle_option_contenutocasella',this).attr('class','fa fa-caret-square-o-up');
    			}
    			else{
    			   $('~ .content_list_option_dati_contenutocasella',this).hide('fast');
    			   $('~ #toggle_option_contenutocasella',this).attr('class','fa fa-caret-square-o-down');
    			}
    		     });
    Questo è il mio codice, e dovrebbe essere semplicissimo in teoria, chiedo ad un pulsante di aprire un menù nascosto.

    la struttura della mia pagina è

    codice:
    <div .contenutototale>
       <div .barravisibile>scritta e <i #pulsante>pulsante</i></div>
       <div .contenutolistanascosta>
          <div .lista>1</div>
          <div .lista>2</div>
       </div>
    </div>
    nel codice javascript ho fatto una copia pari pari al mio, però per farvi capire meglio uso i div qua sopra.

    per come è ora uso il selettore .contenutototale(padre) > #pulsante(figlio) ma la funzione click non si avvia...

    funziona solamente se io cambio il padre con .barravisibile... a quel punto mi fa l'allert() però non esegue nulla, perchè le altre classi sono fuori dal contenitore padre... come posso risolvere? o non ho capito una mazza io?

  2. #2
    Utente bannato
    Registrato dal
    Apr 2009
    Messaggi
    530
    Guarda che nel BODY si deve scrivere così:
    codice:
    <div class="barravisibile">scritta e <i id="pulsante">pulsante</i></div>
    e non:
    codice:
    <div .barravisibile>scritta e <i #pulsante>pulsante</i></div>

  3. #3

  4. #4
    Si lo so... era solo un modo più sbrigativo per scrivere...

    Cmq ho letto quell'articolo dei selettori... grazie ora ho capito qualche cosina di più finalmente...

    codice:
    $(".contenutototale > .barravisibile").click(function(){
                if($('> #pulsante',this).attr('class')=='fa fa-caret-square-o-down'){
                   $('~ contenutolistanascosta',this).show('fast');
                   $('> #pulsante',this).attr('class','fa fa-caret-square-o-up');
                }
                else{
                   $('~ .contenutolistanascosta',this).hide('fast');
                   $('> #pulsante',this).attr('class','fa fa-caret-square-o-down');
                }
                 });
    Cambiando così il codice funziona... ma funziona in modo diverso da quello che voglio, giustamente nella funziona click viene indicato tutto il div.
    E qua sto provando a sistemarmela ma non capisco... penso che il problema sia il this... il codice mi era stato consigliato un po di tempo fa su questo forum, ora che sto andando avanti con lo studio di JS mi è sorto questo dubbio.

    This è un selettore che stampa l'oggetto creato in precedenza, di solito lo stampi con this.proprietà o this singolo.

    Ora in questo caso se io stampo this mi da [Object HTMLelement]
    Se stempo quello contenuto in $('> #toggle_option_contenutocasella',this) invece non riesco a capire cosa contiene... praticamente a che serve? Non mi piace diciamo eseguire comandi senza capirne il perchè...

    E altra cosa... sto riscontrando questo problema questo codice qua è contenuto in un'altro div con una funzione Jquery abbastanza simile... se io schiaccio il pulsante di toggle, attivo anche l'altra animazione... come posso escludere?

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2014
    residenza
    Voltati
    Messaggi
    913
    Ho corretto i selettori del tuo codice iniziale, prova questo:
    codice:
    $("#toggle_option_contenutocasella").click(function(){
        if($(this).attr('class')=='fa fa-caret-square-o-down'){
           $('~ .content_list_option_dati_contenutocasella',this).show('fast');
           $(this).attr('class','fa fa-caret-square-o-up');
        }
        else{
           $('~ .content_list_option_dati_contenutocasella',this).hide('fast');
           $(this).attr('class','fa fa-caret-square-o-down');
        }
    });
    In generale:
    codice:
    $('> #elemento-con-id',this)
    e
    codice:
    $('#qualsiasi.selettore > #elemento-con-id')
    sono UGUALI a
    codice:
    $('#elemento-con-id')
    No

  6. #6
    Quindi il this serve solamente a dire solo questo che ho cliccato?

    perchè effettivamente una cosa che mi sono dimenticato di dire è che la pagina viene creata dinamicamente caricando i dati dal database quindi ci possono essere più .contenitore-da-visualizzare da assegnare nella pagina. Quindi se clicco uno dei pulsanti mi visualizza il div sottostante e non tutti i div con la stessa classe, tanto che mi sono accorto con le prove di essermi dimenticato

    $('.content_list_option_dati_contenutocasella').hide('fast');

    subito dopo l'if in modo che se ne apro un'altro mi chiude quello precedente.

    Cmq usanto il tuo codice non mi apre il visualizza il div... mi cambia la classe del pulsante ma niente cambio dell'attributo display

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.