[javascript/jQuery] callback genegeerd

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Hawtin
  • Registratie: Januari 2010
  • Laatst online: 10-10-2018
Goedendag,

Ik zit met een probleem; namelijk dat mijn callbacks lijken te worden genegeerd door jQuery. Hoewel mijn oorspronkelijke code veel uitgebreider is heb ik het even vereenvoudigd tot hetvolgende:

HTML:
1
2
3
4
5
6
7
8
9
        <table id="leesplank">
            <tr id="1"><td>aap</td><td>noot</td><td>mies</td><td>wim</td><td>zus</td><td>jet</td></tr>
            <tr id="2"><td>teun</td><td>vuur</td><td>gijs</td><td>lam</td><td>kees</td><td>bok</td></tr>
            <tr id="3"><td>weide</td><td>does</td><td>hok</td><td>duif</td><td>schapen</td><td></td></tr>
        </table>
        
        <div id="info">
        
        </div>


Cascading Stylesheet:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
        #leesplank table, th, td {
            border: 1px solid black;
        }
        
        #leesplank td {
            padding: 50px 25px;
        }
        
        #info {
            width: 50px;
            height: 100px;
            background-color:red;
            display:none;
            position:absolute;
        }


JavaScript:
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
    var currentexpand = "";
    var lastexpand = "";
    
    function klap_terug_in(callback) {
        
        if (lastexpand != "") {
            // verwijder currenexpanded class   
            $(lastexpand).removeClass("rowexpanded");
        }
        if (currentexpand != "") {
            // verwijder currenexpanded class
            $(currentexpand).removeClass("rowexpanded");
                
            
            var row_id = $(currentexpand).attr("id");
            if (row_id != undefined) { 
                $("#info").slideUp(1000); 
                $(this).text("laden...");
            }
        }
        
        if (callback && typeof(callback) === "function") {
            callback();
        } 
        
        
    }
    
    function klap_uit(target) {
    
        // laad de div met de gegevens uit de query
        $("#info").text($(target).attr('id'));

        // zet #info precies onder de row
        var rowposition = target.offset();
        var rowtop = rowposition.top;
        var rowleft = rowposition.left;
        var rowheight = target.height();

        // zet layer op zijn plek
        $("#info").css('top', rowtop + rowheight - 1);
        $("#info").slideDown(1000); 
                                        
        // row class toggle
        target.toggleClass("rowexpanded");
    
    }
    
    
    // table row klik
    $(document).on('click', '#leesplank tbody tr', function() {
                
        // zoek en define row waarop is geklikt
        lastexpand = currentexpand;
        currentexpand = $(this);
        
        // als de huidige row expanded is moet die nu worden ingeklapt en het algoritme worden afgekapt
        if($(this).hasClass('rowexpanded')) {
            klap_terug_in();
            return false;
        }
        
        // als er al een row is uitgeklapt moet die eerst terug worden ingeklapt alvorens de nieuwe kan worden uitgeklapt
        if($("#info").css('display') != "none") {
            klap_terug_in(
                function() {
                    klap_uit(currentexpand);
                }
            );
        } else {
            klap_uit(currentexpand);
        }
        
        // geef aan welke rij er nu uitgeklapt wordt
        $("#info").html($(this).attr('id'));
        
    });


Uiteraard gebruik ik hiervoor ook jQuery.

Ik gebruik in de volgende tekst het woord "uitklappen", hier bedoel ik mee dat er een divje onder de table row wordt geplaatst d.m.v. een slideDown-animation.

Mijn bedoeling is hetvolgende: wanneer bijv row 1 is "uitgeklapt" en je klikt vervolgens op row 3, dan moet row 1 eerst inklappen, alvorens row3 wordt geladen met tekst, waarna op zijn beurt weer row3 uitklapt.

Hiervoor heb ik callbacks op vele manieren ingebouwd, maar wat ik ook doe, hij lijkt ze op een of andere manier te negeren, hoewel ze wel worden aangeroepen.

Wat doe ik fout? Hulde aan degene die mij uit de brand zou kunnen helpen.

Acties:
  • 0 Henk 'm!

  • Hawtin
  • Registratie: Januari 2010
  • Laatst online: 10-10-2018
Terwijl ik deze case aan het vertalen was naar het engels en in een JSFiddle te zetten geloof ik dat ik het al heb: de callback moet in de SlideDown() zitten en niet aan het eind van de klap_terug_in() functie. Ik zal de werkende JSFiddle zodirect posten.

Acties:
  • 0 Henk 'm!

  • Hawtin
  • Registratie: Januari 2010
  • Laatst online: 10-10-2018
http://jsfiddle.net/Egidius/Mz3Lj/85/

voìla, 5 uur zoeken en bestuderen zonder resultaat, maar het zelf maken werkt toch altijd het beste.

Evt. een slotje.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Een slotje is niet nodig op een topic als je je oplossing hebt. Zie daarvoor ook onze faq betreffende topiceinde. Gebruik voortaan ook even de edit knop ( Afbeeldingslocatie: http://tweakimg.net/g/forum/images/icons/edit.gif ) als je iets toe te voegen hebt; je topic herhaaldelijk omhoogschoppen is niet nodig ;)

Desalniettemin fijn dat je 't gevonden hebt en de oplossing ook even deelt ;)

[ Voor 8% gewijzigd door RobIII op 29-08-2012 15:51 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij