Jak poprawnie wywołać funkcje setInterval ?

0

Nie wiem co robię źle ale mój prosty kod wygląda tak:

    $(document).ready(function() {
        var map = null;
        var latitude = 0;
        var longitude = 0;
        var markers = new Array();
        var coordinates_start;
	
        var size  = new google.maps.Size(32,32);
        var start_point = new google.maps.Point(0,0);
        var check_point = new google.maps.Point(16,16);
        var public_icon = new google.maps.MarkerImage("http://maps.google.com/mapfiles/kml/pal2/icon13.png", size, start_point, check_point);
    
        var directionsService = new google.maps.DirectionsService();
        var directionsDisplay = new google.maps.DirectionsRenderer();

        function showMap() { 
            setInterval(koko(), 3000);
            setInterval(function(){ console.log('test2')}, 3000);

            var coordinates = new google.maps.LatLng(latitude, longitude);
            var mapOptions = {zoom: 15, center: coordinates, mapTypeId: google.maps.MapTypeId.ROADMAP};
            map = new google.maps.Map(document.getElementById('map'), mapOptions); 
        }
  
        function koko() {
            console.log('test');
        }

        function showMarker(points,markerOption) {
            markerOption.position = points;
            markerOption.map = map;
            markerOption.icon = public_icon;
            var marker = new google.maps.Marker(markerOption);
        }

        function addMarker(coordinates, name, speed, time) {
            var markerDescription = 'TIME: ' + time + '\n';	
            var markerOptions = {map: map, position: coordinates, title: markerDescription}
		
            return new google.maps.Marker(markerOptions);
        }

        function searchAddress() {
            var address = document.getElementById('address').value; 
            directionsDisplay.setMap(map);
            var request = {
                origin: coordinates_start, 
                destination: address,
                travelMode: google.maps.DirectionsTravelMode.DRIVING
            };

            directionsService.route(
                request, 
                function(response, status) {
                    if (status == google.maps.DirectionsStatus.OK) {
                        directionsDisplay.setDirections(response);
                    } else {
                        alert('I can not find address, sorry');
                    }
                }
            );
        }

        showMap();
    });

Pierwszy problem mam taki że jak wykonam ten kod to funkcja koko() wywołuje się tylko raz
a niżej jak jest setInterwal(function().... to wykonuje sie to co 3 sekundy czyli tak jak oczekiwałem i napis test2 właśnie tak się pojawia. Nie wiem dlaczego nie chce się wywołać gdy funkcja jest wystawiona z tej głównej.

A drugi problem może to też dotyczyć jakoś że to pierwsze nie działa. Jak z formularza wpisze adres żeby mi wyszukało na mapie i onSubmit odwołuje się do funkcji searchAddress to mam informację, że ReferenceError: searchAddress is not defined tak jakby nie widział zadeklarowanej funkcji.

Natomiast jak wczytue się kod ?

    <script type="text/javascript" src="/public/plugins/jquery.min.js"></script>
    <script src="https://maps.google.com/maps/api/js?sensor=false" type="text/javascript"></script>
    <script>
        $(document).ready(function() { ...

I dalej kod ten co u góry.
Czy ktoś mógłby rzucić trochę światła na tę stronę ciemności ?

3

nazwaFunkcji ---> zwraca obiekt funkcji, referencję do funkcji. NIE wywołuje jej.
nazwaFunkcji() ---> wywołuje funkcje, zwraca to co funkcja zwróciła.

a ty musisz podać referencję do funkcji, więc nawiasy są niepotrzebne:

 setInterval(koko, 3000);

(funkcja będzie się wywoływać sama później)

1 użytkowników online, w tym zalogowanych: 0, gości: 1