rafinos Δημοσ. 3 Ιουλίου 2014 Δημοσ. 3 Ιουλίου 2014 Γεια σας παιδιά. Έχω φτιάξει μια εφαρμογή για android με html+js και έχω φτιάξει επίσης και ένα website στο οποίο μπορείς να δοκιμάσεις την εφαρμογή (μιας που είναι html). Ας μπω στο κυρίως θέμα όμως... Έχω ένα div στο οποίο κάνω .load() (jquery) ένα ολόκληρο αρχείο html (μαζί με τα παρελκώμενα του). Αυτό το html αρχείο είναι η εφαρμογή. Όταν ο χρήστης πατήσει σε κάποιο άλλο κουμπί του site από το navigation bar, τότε κάνω .empty το div που εμφανίζει την εφαρμογή αλλά τα setTimeout() από πίσω τρέχουν κανονικά και από ότι δοκίμασα δεν μπορώ να παρέμβω μέσα από το site και να τα κάνω clearTimeout()... Ξέρει κανείς μήπως κάποιον τρόπο; Ελπίζω να μην σας μπέρδεψα (το συνηθίζω αυτό )
geomagas Δημοσ. 3 Ιουλίου 2014 Δημοσ. 3 Ιουλίου 2014 ...και από ότι δοκίμασα δεν μπορώ να παρέμβω μέσα από το site και να τα κάνω clearTimeout()... Πως το δοκίμασες; Κώδιξ;
rafinos Δημοσ. 3 Ιουλίου 2014 Μέλος Δημοσ. 3 Ιουλίου 2014 Η μεταβλητή που καλεί το το setTimeout είναι η counter... Έτσι πατώντας ένα οποιδήποτε κουμπί από τα υπόλοιπα της navbar δοκίμασα να τρέξω αυτό... if(typeof(counter) != "undefined"){ clearTimeout(counter); } Δε βάζω όλο τον κώδικα γιατί θα μπερδευτούμε χειρότερα... αν θέλεις ρίξε μια ματιά εδώ Πάτα στο Play Game ... πάτα marathon μόλις φορτώσει... μετά πάτα σε οποιδήποτε άλλο κουμπί και στη συνέχεια ξανά Play Game... Θα ξανατρέξει κανονικά η εφαρμογή αλλά ξαφνικά θα σου βγάλει ένα time is over που είναι το μήνυμα όταν τελειώνει ο χρόνος και αυτό γίνεται μέχρι να τελειώσουν οι ζωές (πρόκειται για παιχνίδι ερωτήσεων )
geomagas Δημοσ. 3 Ιουλίου 2014 Δημοσ. 3 Ιουλίου 2014 Δε βάζω όλο τον κώδικα γιατί θα μπερδευτούμε χειρότερα... αν θέλεις ρίξε μια ματιά εδώ Δεν εχω chrome/safari και έφαγα πόρτα...
rafinos Δημοσ. 3 Ιουλίου 2014 Μέλος Δημοσ. 3 Ιουλίου 2014 Χαχαχαχαχα χρησιμοποιώ sqlite για αυτό δε δουλεύει στους άλλους browsers να σου στείλω με pm τον κώδικα;
slevinkelevra Δημοσ. 3 Ιουλίου 2014 Δημοσ. 3 Ιουλίου 2014 Ναι καταλαβα το προβλημα....Ε αμα δε δειξεις λιγο κωδικα δεεεεν.... Τα setTimeout που ειναι? Δεν ειναι μεσα στο html αρχειο που φορτωνεις με load? Και γιατι δε μπορεις να τα πειραξεις? Κολλησα με το παιχνιδι πλακα πλακα. Νικαω!!!
rafinos Δημοσ. 3 Ιουλίου 2014 Μέλος Δημοσ. 3 Ιουλίου 2014 O javascript κώδικας του index.html Μην ασχολείστε με τα σχόλια $(document).ready(function(){ var name = ''; var number = ''; var isChrome = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor); var isSafari = /Safari/.test(navigator.userAgent) && /Apple Computer/.test(navigator.vendor); function hideall(){ if(typeof(counter) != "undefined"){ clearTimeout(counter); } $('#home_div').hide(); $('#home_div').animate({scrollTop: '0px'}, 1); $('#download').hide(); $('#information').hide(); $('#information').animate({scrollTop: '0px'}, 1); $('#instructions').hide(); $('#instructions').animate({scrollTop: '0px'}, 1); $("#zoom_image_div").hide(); $("#screenshots").hide(); $('#screenshots').animate({scrollTop: '0px'}, 1); $("#screenshot_zoom_div").hide(); $("#play_game").hide(); $("#play_game").empty(); $('#not_supported_browser').hide(); $("#menu a").each(function(){ if($(this).hasClass("active")){ $(this).addClass('menu_links'); $(this).removeClass("active"); } }); return false; } hideall(); $('#home_div').show(); $('#home_button').addClass('active'); $('#home_button').removeClass('menu_links'); $('#home_button').click(function(evt){ if(!$(this).hasClass("active")){ hideall(); $('#home_div').show(); evt.preventDefault(); $(this).addClass('active'); $(this).removeClass('menu_links'); return false; } }); $('#download_button').click(function(evt){ if(!$(this).hasClass("active")){ hideall(); $('#download').show(); evt.preventDefault(); $(this).addClass('active'); $(this).removeClass('menu_links'); } }); $('#information_button').click(function(evt){ if(!$(this).hasClass("active")){ hideall(); $('#information').show(); evt.preventDefault(); $(this).addClass('active'); $(this).removeClass('menu_links'); } }); $('#instructions_button').click(function(evt){ if(!$(this).hasClass("active")){ hideall(); $('#instructions').show(); evt.preventDefault(); $(this).addClass('active'); $(this).removeClass('menu_links'); } }); $('#play_button').click(function(evt){ if(!$(this).hasClass("active")){ hideall(); if ((isChrome) || (isSafari)){ $('#play_game').load("game/game.html"); $('#play_game').show(); }else{ $('#not_supported_browser').show(); } evt.preventDefault(); $(this).addClass('active'); $(this).removeClass('menu_links'); } }); $('#screenshots_button').click(function(evt){ if(!$(this).hasClass("active")){ hideall(); $('#screenshots').show(); evt.preventDefault(); $(this).addClass('active'); $(this).removeClass('menu_links'); } }); }); και η συνάρτηση που καλεί το counter στο αρχείο που γίνεται .load() function countdown(){ $('#timer').css('width',timer + '%'); if(timer<=0){ if(game_type=="marathon"){ lives--; } $('#time_is_up').show(); //AndAud.playAudio(wrong_audio, $("input[name='mute_hidden']").val()); if($("input[name='mute_hidden']").val() > 0){ $("#wrong_sound").get(0).play(); } clearTimeout(counter); setTimeout(doitagain,2000); return; } //Τι είδος παιχνιδιού είναι Marathon ή Time trial if(game_type=="marathon"){ if(c_answers < 10){ timer -= (100/10); //10 δευτερόλεπτα }else if(c_answers >= 10 && c_answers < 20){ timer -= (100/9); //9 δευτερόλεπτα }else if(c_answers >= 20 && c_answers < 30){ timer -= (100/8); //8 δευτερόλεπτα }else if(c_answers >= 30 && c_answers < 40){ timer -= (100/7); //7 δευτερόλεπτα }else if(c_answers >= 40 && c_answers < 50){ timer -= (100/6); //6 δευτερόλεπτα }else if(c_answers >= 50){ timer -= (100/5); //5 δευτερόλεπτα } }else if(game_type=="time_trial"){ timer -= (100/60) ; //60 δευτερόλεπτα } counter = setTimeout(countdown,1000); }
alou Δημοσ. 3 Ιουλίου 2014 Δημοσ. 3 Ιουλίου 2014 (επεξεργασμένο) Για δοκίμασε να ορίσεις κάποιο bind με callback αφότου γίνει load το html σου, πχ $('#phonel').load('game.html', function(){ $('.menu li').on('click', function(event){ event.preventDefault(); clearTimeout(whatever); //load other stuff }); }); (.menu li υπέθεσα ότι είναι τα κουμπια του μενού σου, δεν πρόσεξα την html εκεί) edit: μόλις έκανα και μια δοκιμή: a.html ... <a id="testing" class="btn btn-default">remove timeout</a> <div class="container" id="fcon"></div> ... <script> jQuery(document).ready(function($) { $('#fcon').load('test.html', function(){ $('#testing').on('click', function(e){ e.preventDefault(); clearInterval(tade); console.log('cleared') }) }); }); </script> kai test.html <script> var tade = setInterval(function(){ console.log('still running'); }, 2000); </script> και δούλεψε κανονικά (έγινε clear το interval δηλαδή). Επεξ/σία 3 Ιουλίου 2014 από alou
rafinos Δημοσ. 3 Ιουλίου 2014 Μέλος Δημοσ. 3 Ιουλίου 2014 Εγώ το μόνο που παίρνω στην κονσόλα είναι αυτό Uncaught ReferenceError: counter is not defined $('#play_game').load("game/game.html", function(){ $('.menu_links').on('click', function(e){ e.preventDefault(); clearTimeout(counter); console.log('cleared') }); });
alou Δημοσ. 3 Ιουλίου 2014 Δημοσ. 3 Ιουλίου 2014 Μα το counter ζεί μόνο μέσα στο function countdown(){.., είναι θέμα scope. Δήλωσε global το counter κάπου πριν και έξω από το function var counter; function countdown(){ ... counter = setTimeout(countdown,1000); }
rafinos Δημοσ. 3 Ιουλίου 2014 Μέλος Δημοσ. 3 Ιουλίου 2014 Μα το counter ζεί μόνο μέσα στο function countdown(){.., είναι θέμα scope. Δήλωσε global το counter κάπου πριν και έξω από το function var counter; function countdown(){ ... counter = setTimeout(countdown,1000); } Όχι είναι δηλωμένο κανονικά ως global και όχι μέσα στη συνάρτηση... Σε κάποιες περιπτώσεις μέσα στον κώδικα του game.html γίνεται clearTimeout το counter αν χρειαστεί...
alou Δημοσ. 3 Ιουλίου 2014 Δημοσ. 3 Ιουλίου 2014 Ναι, όντως... περίεργο, αύριο αν δεν το έχεις λύσει το ξανακοιτάμε γιατί τα βλέπω διπλά πλέον :/
rafinos Δημοσ. 4 Ιουλίου 2014 Μέλος Δημοσ. 4 Ιουλίου 2014 Λέτε να φταίει το ότι στο game.html έχω κανονικά tags html head κτλ;
alou Δημοσ. 4 Ιουλίου 2014 Δημοσ. 4 Ιουλίου 2014 Όχι, έκανα πείραμα και εγώ και δεν είχε θέμα - τουλάχιστον από μόνο του. Δεν μπορώ όμως να παίξω με τον δικό σου κώδικα και δεν βρίσκω άκρη τι φταίει, στη θέση σου θα δοκίμαζα να αφαιρέσω τα πάντα από js στο game.html και να αφήσω να τρέχει αρχικά μόνο το counter timeout να δω αποτέλεσμα.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα