Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    problema filtro risultati jquery

    Ho creato una pagina che ha un filtro per la ricerca usando jquery.
    Ma penso di aver commesso qualche errore nell'integrazione con gli spoiler.

    In pratica mentre si digita nel form vengono trovati in tempo reale il testo digitato, ma non vengono nascosti gli altri risultati (vuoti) contrassegnati dal tag[*]

    Qui la pagina con gli errori:
    http://nathan4000.altervista.org/test3.html

    Questo il codice operativo (ma con errori):

    codice:
    <script src="jquery.min.js"></script>
      
      <script>
    
    (function ($) {
      // custom css expression for a case-insensitive contains()
      jQuery.expr[':'].Contains = function(a,i,m){
          return (a.textContent || a.innerText || "").toUpperCase().indexOf(m[3].toUpperCase())>=0;
      };
    
    
      function listFilter(header, list) { // header is any element, list is an unordered list
        // create and add the filter form to the header
        var form = $("<form>").attr({"class":"filterform","action":"#"}),
            input = $("<input>").attr({"class":"filterinput","type":"text"});
        $(form).append(input).appendTo(header);
    
        $(input)
          .change( function () {
            var filter = $(this).val();
            if(filter) {
              // this finds all links in a list that contain the input,
              // and hide the ones not containing the input while showing the ones that do
              $(list).find("a:not(:Contains(" + filter + "))").parent().slideUp();
              $(list).find("a:Contains(" + filter + ")").parent().slideDown();
            } else {
    		 // modificando li in div ti permette di espandere tutti gli spoiler - occorre effettuare una ricerca e poi cancellare
              $(list).find("li").slideDown();
            }
            return false;
          })
        .keyup( function () {
            // fire the above change event after every letter
            $(this).change();
        });
      }
    
    
      //ondomready
      $(function () {
        listFilter($("#header"), $("#list"));
      });
    }(jQuery));
    
      </script>

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    1,453
    Tu non nascondi 'li' ma lo spoiler quindi ti basta riselezionarlo, ad esempio con closest()

    codice:
    $(list).find("li").find("a:not(:Contains(" + filter + "))").closest("li").slideUp();
    $(list).find("li").find("a:Contains(" + filter + ")").closest("li").slideDown();

  3. #3
    problema risolto con la tua modifica, grazie mille, RoTeam.

    Volevo chiederti ancora una cosa sempre a proposito del codice con cui lavoro.

    Ho notato che con opportune modifiche posso aprire tutti gli spoiler, ma poi tutto si blocca

    Esiste una funzione jquery, premendo un pulsante o bottone che ti permette di aprire tutti gli spoiler e chiuderli?

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    1,453
    Originariamente inviato da elixir1349
    problema risolto con la tua modifica, grazie mille, RoTeam.

    Volevo chiederti ancora una cosa sempre a proposito del codice con cui lavoro.

    Ho notato che con opportune modifiche posso aprire tutti gli spoiler, ma poi tutto si blocca

    Esiste una funzione jquery, premendo un pulsante o bottone che ti permette di aprire tutti gli spoiler e chiuderli?
    Intendi una cosa simile?

    codice:
    $("li").each(function(){ $(this).slideUp(); });

  5. #5
    mmm..penso che la funzione sia quella, ma come posso associare questa funzione ad un pulsante?

    Vorrei, premendo un pulsante sia poter aprire gli spoiler che chiuderli.

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    1,453
    Potresti semplicemente creare una funzione e associarla all'evento onclick del pulsante

  7. #7
    Ti prego di darmi ancora una mano, poi non ti tormento piu

    Ho provato con
    codice:
    <div class="menu">
      apri spoiler
    </div>
    
    <script type="text/javascript">
    $('.menu').bind('click', function() {
      $("li").each(function(){ $(this).slideUp(); });
    });
    </script>
    ma gli spoiler non vengono nè aperti nè chiusi. Vengono nascosti tutti i valori, ma non il contenuto dei valori (non si apre il contenuto di adriano celentano, ma viene nascosto adriano celentano stesso)
    Io vorrei che la funzione aprisse e chiudesse anche il contenuto degli valori filtrati, non che si aprano/chiudano sempre tutti i contenuti di tutti i valori.

  8. #8
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    1,453
    codice:
     $(document).ready(function(){
         $(".menu").click(function(){ 
             $("li").each(function(){
                if($(this).is(":hidden"))
                 {
                    $(this).slideDown();
                    $(".menu").html("chiudi spoiler");
                     
                  }else{
                     $(this).slideUp();
                     $(".menu").html("apri spoiler");
                }
             });
         });
       });
    Cosi dovresti aver capito il concetto e aver risolto il problema

  9. #9
    grazie del chiarimento ma c'è ancora qualche problemino. Guarda qui:
    http://nathan4000.altervista.org/test3.html

    In pratica non vengono nascosti gli .spoiler ma i[*].
    Se io premo su Apri Spoiler non mi si aprono i contenuti che i[*] contengono al loro interno, ma nasconde tutti gli[*].
    Se poi ripremo su Chiudi mi riappare la lista.

    Ho provato a sostituire li con .spoiler ma non accade nulla.
    Non capisco quale sia il problema.

  10. #10
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    1,453
    Originariamente inviato da elixir1349
    grazie del chiarimento ma c'è ancora qualche problemino. Guarda qui:
    http://nathan4000.altervista.org/test3.html

    In pratica non vengono nascosti gli .spoiler ma i[*].
    Se io premo su Apri Spoiler non mi si aprono i contenuti che i[*] contengono al loro interno, ma nasconde tutti gli[*].
    Se poi ripremo su Chiudi mi riappare la lista.

    Ho provato a sostituire li con .spoiler ma non accade nulla.
    Non capisco quale sia il problema.
    Semplicemente perché metti come scritta iniziale 'apri spoiler' anche se sono aperti

    cambia la scritta e poi avrà logica
    codice:
    <div class="menu">
      apri spoiler
    </div>
    Se si chiudono solo gli spoiler resterebbero i segnetti dei .li


    ps: hai invertito anche le scritte nell'if-else, ricopia il codice sopra e cambia la classe menu

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.