[jquery] Uncaught TypeError: undefined is not a function

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Php knipper

php knipper

10/11/2013 23:01:17
Quote Anchor link
Hallo,

Via onderstaande code bestuur ik mijn playlist op mijn site, al dan niet via url.
Alles werkt totdat ik via een # een filmpje aanroep (dus de pagina herlaadt),
dan krijg ik deze error
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
Uncaught TypeError: undefined is not a function

deze gaat over regel "'onStateChange': onPlayerStateChange".

Hoe komt dit en wat doe ik fout?

Groeten knipper.

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
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
                /*===youtube playlist===*/
                    
                    function onPlayerStateChange(event) {
                        switch(event.data) {
                            case YT.PlayerState.ENDED:
                                $("#header_favicon").attr("href","main/icon/favicon/favicon.ico");
                                //video is ten einde, triger volgende clip
                                var ps = $("#playlist_herhaal").val();
                                if(ps == 'alles') {
                                    var vidId_next = $('.playlist .active').next().attr('id');
                                    open_youtube(vidId_next);
                                } else if(ps == 'dit') {
                                    var vidId_next = $('.playlist .active').attr('id');
                                    open_youtube(vidId_next);
                                }
                                break;
                            case YT.PlayerState.PLAYING:
                                $("#header_favicon").attr("href","main/icon/favicon/favicon_play.ico");
                                break;
                            case YT.PlayerState.PAUSED:
                                $("#header_favicon").attr("href","main/icon/favicon/favicon_pause.ico");
                                break;
                            case YT.PlayerState.BUFFERING:
                                $("#header_favicon").attr("href","main/icon/favicon/favicon.ico");
                                break;
                            case YT.PlayerState.CUED:
                                $("#header_favicon").attr("href","main/icon/favicon/favicon.ico");
                                break;
                        }
                    }
                    
                    /*Bedien youtube*/
                    function open_youtube(vidId) {
                        if(vidId != 'undefined') {
                            window.location.hash = 'yt_' + vidId;
                            $('#muziekplayer').html('<iframe id="player_'+vidId+'" width="100%" height="315" src="http://www.youtube.com/embed/' + vidId + '?enablejsapi=1&autoplay=1&autohide=1&showinfo=0" frameborder="0" allowfullscreen></iframe>');
                            
                            $('.playlist .muziek').removeClass('active');
                            $('#' + vidId).addClass('active');
                            
                            new YT.Player('player_'+vidId, {
                                events: {
                                    'onStateChange': onPlayerStateChange
                                }
                            });
                    
                        } else {
                            $('#muziekplayer').html('');
                        }
                        $('.playlist .muziek').removeClass('active');
                        $('#' + vidId).addClass('active');
                    }    
                    
                    /*Truger via knoppen in menu*/    
                        jQuery('.playlist .muziek').click(function() {                      
                                var vidId = $(this).attr('id');
                                open_youtube(vidId);    
                        });
                    
                    /*auto trigger via url #(hash)*/
                    var hash = window.location.hash;
                    var substr = hash.split('_');
                    if(substr[0] == '#yt') {
                        $('#' + substr[1]).click();
                    }
 
PHP hulp

PHP hulp

28/03/2024 23:24:57
 
Erwin H

Erwin H

11/11/2013 00:51:37
Quote Anchor link
Zo te zien geef je een event handler mee in geval een event wordt getriggered. In dat geval moet je dus hebben:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
'onStateChange': onPlayerStateChange()
 
Php knipper

php knipper

11/11/2013 15:06:25
Quote Anchor link
Nu is de error
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
Uncaught TypeError: Cannot read property 'data' of undefined

Over lijn
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
4. switch(event.data) {
 
Erwin H

Erwin H

11/11/2013 15:20:48
Quote Anchor link
Je moet nog een object meegeven in die functie. Alleen welk object dat is..... geen idee.
 
Php knipper

php knipper

11/11/2013 19:35:58
Quote Anchor link
Ik weet ook niet wat ik nu moet doen, ik heb deze code van de youtube documenten gehaald.
Weet iemand wat nu?
 
Kris Peeters

Kris Peeters

12/11/2013 10:50:10
Quote Anchor link
Vreemd, ik zie het niet.

Kan je de volledige code posten?
 
Php knipper

php knipper

12/11/2013 20:34:20
Quote Anchor link
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
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
<script>
            $(document).ready(function(){
                /*===youtube playlist===*/
                    
                    function onPlayerStateChange(event) {
                        switch(event.data) {
                            case YT.PlayerState.ENDED:
                                $("#header_favicon").attr("href","main/icon/favicon/favicon.ico");
                                //video is ten einde, triger volgende clip
                                var ps = $("#playlist_herhaal").val();
                                if(ps == 'alles') {
                                    var vidId_next = $('.playlist .active').next().attr('id');
                                    open_youtube(vidId_next);
                                } else if(ps == 'dit') {
                                    var vidId_next = $('.playlist .active').attr('id');
                                    open_youtube(vidId_next);
                                }
                                break;
                            case YT.PlayerState.PLAYING:
                                $("#header_favicon").attr("href","main/icon/favicon/favicon_play.ico");
                                break;
                            case YT.PlayerState.PAUSED:
                                $("#header_favicon").attr("href","main/icon/favicon/favicon_pause.ico");
                                break;
                            case YT.PlayerState.BUFFERING:
                                $("#header_favicon").attr("href","main/icon/favicon/favicon.ico");
                                break;
                            case YT.PlayerState.CUED:
                                $("#header_favicon").attr("href","main/icon/favicon/favicon.ico");
                                break;
                        }
                    }
                    
                    /*Bedien youtube*/
                    function open_youtube(vidId) {
                        if(vidId != 'undefined') {
                            window.location.hash = 'yt_' + vidId;
                            $('#muziekplayer').html('<iframe id="player_'+vidId+'" width="100%" height="315" src="http://www.youtube.com/embed/' + vidId + '?enablejsapi=1&autoplay=1&autohide=1&showinfo=0" frameborder="0" allowfullscreen></iframe>');
                            
                            $('.playlist .muziek').removeClass('active');
                            $('#' + vidId).addClass('active');
                            
                            new YT.Player('player_'+vidId, {
                                events: {
                                    'onStateChange': onPlayerStateChange()
                                }
                            });
                    
                        } else {
                            $('#muziekplayer').html('');
                        }
                        $('.playlist .muziek').removeClass('active');
                        $('#' + vidId).addClass('active');
                    }    
                    
                    /*Truger via knoppen in menu*/    
                        jQuery('.playlist .muziek').click(function() {                      
                                var vidId = $(this).attr('id');
                                open_youtube(vidId);    
                        });
                    
                    /*auto trigger via url #(hash)*/
                    var hash = window.location.hash;
                    var substr = hash.split('_');
                    if(substr[0] == '#yt') {
                        $('#' + substr[1]).click();
                    }
                
            });
        </script>
 
Kris Peeters

Kris Peeters

13/11/2013 10:20:23
Quote Anchor link
Ja, okay, ik zie het probleem.

Je zal function onPlayerStateChange moeten verplaatsen; zorg dat die globaal staat, dus buiten $(document).ready()

Youtube probeert de functie aan te roepen, maar die bevindt zich buiten de scope waar Youtube aan kan.


En lijn 45 is sowieso zonder ()

'onStateChange': onPlayerStateChange
Gewijzigd op 13/11/2013 14:15:23 door Kris Peeters
 
Php knipper

php knipper

13/11/2013 17:55:22
Quote Anchor link
@Kris kan je daar een voorbeeld van geven? ik had die "()" er weer af gehaalt en de functie onder <script> gezet en dan kreeg ik weer die "undefined" error en met de haakjes weer de "data" error.
 
Erwin H

Erwin H

13/11/2013 18:13:58
Quote Anchor link
Volgens mij klopt het niet wat je zegt Kris. Toen hij het meegaf zonder haakjes kreeg hij de error:
Quote:
Uncaught TypeError: undefined is not a function

Toen hij meegaf met haakjes kreeg hij
Quote:
Uncaught TypeError: Cannot read property 'data' of undefined

Met andere woorden in eerste instantie werd de functie niet gevonden, in tweede instantie wel. Het probleem in de tweede is echter dat er nog een object meegegeven moet worden wat niet gedaan wordt (vandaar de error 'Cannot read propperty data of undefined'). Vraag is alleen welk object, of watvoor object. Het lijkt op een event handler en ik zou dan zeggen een event object, maar bij mijn weten hebben die geen data property. Wat dan wel?
 



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.