Hide/Show met jQuery maar dan dynamisch

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Eddy E

Eddy E

06/06/2012 20:54:54
Quote Anchor link
Ik kom er even niet uit.

Ik heb een 30 tal keer dit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
$ver_id = 22; // wisselend vanuit database... duhu!
echo '<input type="button" value="'.$naam.'" name="wisselknop_verid_'.$ver_id.'"><br>';
echo '<div class="wissel" id="div_verid_'.$ver_id.'" style="display: none;">';


Nu wil ik, dat als je op de <INPUT> klikt, alle div.wissel inklappen en daarna div#ver_id_22 (of een ander nummer) wel weer wordt opengeklapt dmv display: block;

Maar hoe geef ik jQuery aan dat hij naar het ID van de input moet kijken en met dat ID de div daarvan moet openen?

jQuery:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
    $('.wisselknop').click(function(){
        $('div#div_verid_'+intval(this.id).toggle();
        });
    


Kan iemand mij helpen?
Gewijzigd op 06/06/2012 20:55:17 door Eddy E
 
PHP hulp

PHP hulp

25/11/2024 08:20:58
 
Erwin H

Erwin H

06/06/2012 21:15:45
Quote Anchor link
Volgens mij zo:
$('div#div_verid_'+$(this).attr('id')).toggle();

(de intval heb ik weggelaten, omdat een id volgens mij officieel helemaal geen getal mag zijn)

Toevoeging op 06/06/2012 21:16:54:

maar.... heeft je button wel dat getal als id? Je button heeft zo te zien helemaal geen id.
 
Eddy E

Eddy E

06/06/2012 21:29:37
Quote Anchor link
Nee, die heeft een naam.

Ik heb het inmiddels voor elkaar met deze code.:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    // cms vakken verbergen op 1 na
    $(document).ready(function()
        {        
        $('.wisselknop').click(function()
            {
            var str = $(this).attr("name");
            var pattern = /[0-9]+/g;
            var verid = str.match(pattern);
            var elem = "div#div_verid_";
            elem = elem + verid;
            
            $('div.wissel').css("display","none");
            $(elem).css("display","block");
            });
        });


Als het beter (korter/ sneller) kan: graag!
 
Joakim Broden

Joakim Broden

06/06/2012 21:34:14
Quote Anchor link
Dus als je op een input klikt moet de div er na een toggle doen?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
    $ver_id
= 22;
    echo '<input type="button" value="'.$naam.'" name="verid_'.$ver_id.'"><br>';
    echo '<div class="wissel" id="verid_'.$ver_id.'" style="display: none;">Test</div>';
?>


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
$('input').live('click', function() { // Set een klik op alle inputs
    $('.wissel').hide(); // verberg alle .wissel divs
    $('#' + $(this).attr('name')).show(); // Toon de .wissel div die bij de input hoord.
});


PS hoe kom je eigenlijk bij .wisselknop :S die zie ik nergens in je input staan?
Gewijzigd op 06/06/2012 21:53:34 door Joakim Broden
 
Eddy E

Eddy E

06/06/2012 21:38:37
Quote Anchor link
Ik wil nu dat als een blok (div) open staat en op de bijbehorende <input> geklikt wordt, deze ook gesloten wordt.

Maar dit werkt niet:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
    // cms vakken verbergen op 1 na
    $(document).ready(function()
        {        
        $('.wisselknop').click(function()
            {
            // verkrijg de naam met het vereniging_id erin
            var str = $(this).attr("name");
            var pattern = /[0-9]+/g;
            var verid = str.match(pattern);
            var elem = "div#div_verid_";
            elem = elem + verid;
            
            // zet alle blokjes dicht
            $('div.wissel').css("display","none");
            
            // zet het geklikte blok open of dicht
            if( $(elem).css("display") == "none")
                {
                $(elem).css("display","block");
                alert("none");
                }
            else
                {
                $(elem).css("display","none");
                alert("block");
                }
            });
        });


Herhaald blijven klikken levert steeds NONE op, terwijl ik de <div> wel ziet (en de display dus op "block" staat)
 
Joakim Broden

Joakim Broden

06/06/2012 21:41:26
Quote Anchor link
Zie mijn voorbeeld, volgens mij is dit wat je wild? En anders snap ik je bedoeling niet.

Waarom met css dislay gaan kutten als je .hide() .show() hebt? Wiel nog een keer uitvinden?
 
Eddy E

Eddy E

06/06/2012 21:44:09
Quote Anchor link
Geen idee. Jouw code werkt niet direct. Dat zit hem waarschijnlijk in het feit dat NAME != ID!
En de NAME is ook uniek.

Ik heb nu:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
    // cms vakken verbergen op 1 na
    $(document).ready(function()
        {        
        $('.wisselknop').click(function()
            {
            // verkrijg de naam met het vereniging_id erin
            var str = $(this).attr("name");
            var pattern = /[0-9]+/g;
            var verid = str.match(pattern);
            var elem = "div#div_verid_";
            elem = elem + verid;
            
            // zet alle blokjes dicht
            $('div.wissel').css("display","none");
            
            // zet het geklikte blok open of dicht
            if( $(elem).css("display") == "none")
                {
                $(elem).show();
                }
            else
                {
                $(elem).hide();
                }
            });
        });


En dat werkt.
Enige wat nog niet werkt... als ik op een SHOWed knop klik, moet hij ook verbergen.
Maar dat lukt dus (nog niet).
 
Erwin H

Erwin H

06/06/2012 21:46:06
Quote Anchor link
Eddy Erkelens op 06/06/2012 21:29:37:
Als het beter (korter/ sneller) kan: graag!

Uhm, ja, als je gewoon zorgt dat de id van de div direct af te leiden is uit de id van de knop dan heb je het hele stuk met de regex niet nodig. Lijkt me een stuk efficienter.
 
Eddy E

Eddy E

06/06/2012 21:48:36
Quote Anchor link
Dat is het, maar een ID moet toch uniek zijn en kan dus niet 2x gebruikt worden? Met name idem dito... toch?
 
Joakim Broden

Joakim Broden

06/06/2012 21:55:54
Quote Anchor link
Eddy Erkelens op 06/06/2012 21:44:09:
Geen idee. Jouw code werkt niet direct. Dat zit hem waarschijnlijk in het feit dat NAME != ID!
En de NAME is ook uniek.

Ik geef je een voorbeeld die werkt. Heb je er wel na gekeken , blijkbaar niet goed. En als het niet zou werken waarom probeer je er dan niet achter te komen waarom het niet werkt? Probeer het dan werkend te krijgen en val niet gelijk terug op je oude code.

Eddy Erkelens op 06/06/2012 21:48:36:
Dat is het, maar een ID moet toch uniek zijn en kan dus niet 2x gebruikt worden? Met name idem dito... toch?

En wat betreft ID moet inderdaad uniek zijn en name ook. Maar bij het zelfde attribute. Dus Je mag best name="test1" en id="test1" zijn...
Gewijzigd op 06/06/2012 22:01:16 door Joakim Broden
 
Eddy E

Eddy E

06/06/2012 22:01:36
Quote Anchor link
Zoiets heb ik nu inderdaad ingebakken. En dat werkt nu.

Maar het inklappen van een (enig) uitgeklapt ding werkt nog niet.
Ik heb 30 knoppen: druk op nummer 5 sluit allen (zijn ze standaard al) en opent 5.
Als ik daarna druk op 20, sluit alles (dus ook 5) en opent gelijk 20. Prima.

Maar als nu 20 open staat, en ik druk weer op 20, wil ik dat alles gesloten wordt EN BLIJFT. Dus ook nummer 20 zelf.

Met $('#' + $(this).is("visible") wilde ik kijken of hij open stond of niet, maar die blijft altijd false teruggeven (ook als hij wel zichtbaar is).

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
    // cms vakken verbergen op 1 na
    $(document).ready(function()
        {                    
            $('.wisselknop').live('click', function() { // Set een klik op alle inputs
                $('.wissel').hide(); // verberg alle .wissel divs
                $('#' + $(this).attr('name')).show(); // Toon de .wissel div die bij de input hoort.
            });
        });
 
Joakim Broden

Joakim Broden

06/06/2012 22:11:46
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
$('input').live('click', function() { // Set een klik op alle inputs
    $('#' + $(this).attr('name')).toggle(); // Toggle de .wissel div die bij de input hoord.
    $('.wissel:not(#' + $(this).attr('name') + ')').hide(); // verberg alle .wissel divs
});
 
Erwin H

Erwin H

06/06/2012 22:20:53
Quote Anchor link
Eddy Erkelens op 06/06/2012 21:48:36:
Dat is het, maar een ID moet toch uniek zijn en kan dus niet 2x gebruikt worden? Met name idem dito... toch?

Klopt. Dus als je de knop bijvoorbeeld #test1 geeft als id en de div #div_test1 als id, dan kan je heel eenvoudig de div vinden op basis van de knop id.



Toevoeging op 06/06/2012 22:22:48:

Eddy Erkelens op 06/06/2012 22:01:36:
Maar als nu 20 open staat, en ik druk weer op 20, wil ik dat alles gesloten wordt EN BLIJFT. Dus ook nummer 20 zelf.

Gewoon geen toggle gebruiken, maar show en hide. Ik gebruik nooit toggle omdat je dan altijd van dit soort rare dingen krijgt.
 
Joakim Broden

Joakim Broden

06/06/2012 22:26:14
Quote Anchor link
Erwin H op 06/06/2012 22:20:53:
Gewoon geen toggle gebruiken, maar show en hide. Ik gebruik nooit toggle omdat je dan altijd van dit soort rare dingen krijgt.


Juist wel, toggle() is vet handig. Dus als je iets in en uit wilt laten klappen gebruik jij hide() en show() en dan eerst nog kijken of een div zichtbaar is of niet? Das toch juis onhandig, meer type werk, meer tekst, meer bytes, meer dataverkeer, website langzamer etc.

Aan de hand van mijn voorbeeld zie je hoe je toggle() kunt gebruiken ;-)
Gewijzigd op 06/06/2012 22:38:42 door Joakim Broden
 
Eddy E

Eddy E

07/06/2012 17:40:25
Quote Anchor link
Ik probeer het vanavond even uit.
Ziet er redelijk uit en hopelijk gaat het goed werken.
 
Erwin H

Erwin H

07/06/2012 17:48:19
Quote Anchor link
Hertog Jan op 06/06/2012 22:26:14:
Juist wel, toggle() is vet handig. Dus als je iets in en uit wilt laten klappen gebruik jij hide() en show() en dan eerst nog kijken of een div zichtbaar is of niet? Das toch juis onhandig, meer type werk, meer tekst, meer bytes, meer dataverkeer, website langzamer etc.

Aan de hand van mijn voorbeeld zie je hoe je toggle() kunt gebruiken ;-)

ALLEEN als je ook echt wil togglen. Wat de TS wil is dat eigenlijk niet. Als hij op de knopt klikt wil hij dat altijd alle divs ingeklapt worden en die ene (die bij de knop hoort) uitgeklapt. Als je dan toggle gebruikt klap je die ene div de ene keer uit en de volgende keer in. Dat wil hij (zoals ik het lees) niet. In dat geval is het derhalve verstandiger om hide/show te gebruiken. Als je namelijk show gebruikt terwijl de div al zichtbaar is dan is er niets aan de hand.
 
Eddy E

Eddy E

07/06/2012 18:05:02
Quote Anchor link
Ik gebruik wel .show() en .hide().


Toevoeging op 07/06/2012 19:54:29:

Ik zeg net tegen mijn (bevallige) vrouw dat ik geweldig ben omdat het zo goed ben.
Maar eigenlijk komt Hertog Jan de eer toe.

Dus... neem ik maar een Hertogje! Bedankt. Werkt perfect.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.