Клуб API Карт

Многократный вызов собственной функции.

Пост в архиве.
std-x1
24 мая 2011, 13:30

Добрый день. У меня не корректно работает собственной функции
edit(). Метка создается по клику по карте, после чего автоматически открывается
балун в этот момент вызывается функция, после закрытия балуна и открытия его эта
функция выполняется снова в результате чего обработчик срабатывает столько раз
сколько было создано меток и сколько раз был открыт балун. Как можно это
избежать?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Примеры. Геокодирование.</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <script src="http://api-maps.yandex.ru/1.1/index.xml?key=AJLTv00BAAAAdVVMEAIAb8s3w4UkGWa8Q1-jXbSH7_YFA-YAAAAAAAAAAABUbAlG0GzaW7jiSWTwcHLM56kSug==" type="text/javascript"></script>
    <script type="text/javascript">
        var map;
        var MarkID = 0;
        var Mark = [];
        var CoordPoint = [];
        var id, idDell, idLoad;
        function edit(coord){
            // Delete placemark
            for(var i=0; i <CoordPoint.length ;i++){
                if (CoordPoint[i] == coord) {
                    idDell = "#"+i+" input[value=Удалить]";
                    idLoad = "#"+i+" input[value=Загрузить]";
                    idInfo = "#"+i+" textarea";
                    id = i;
                    //alert(id);
                    break;
                    }    
                }
            YMaps.jQuery(idDell).click(function (){
                setTimeout('map.removeOverlay(Mark[id])',1);
            }
            
            // Loading
            YMaps.jQuery(idLoad).click(function (){
                text1 = YMaps.jQuery(idInfo).val(
                alert("text = " + text1
            }
        }

        function newcoord(coord, coord1){
            for(var i=0; i <CoordPoint.length; i++){
                if (CoordPoint[i] == coord){
                    CoordPoint[i] = coord1;
                    break;
                    }
                }
            }
        YMaps.jQuery(function () {
             // Создание перетаскиваемой метки по клику
        YMaps.Events.observe(map, map.Events.Click, function(map, obj) {
        var coord = obj.getGeoPoint(
        CoordPoint.push(coord);
        // Создаем метку с кнопкой удаления внутри
        Mark[MarkID] = new YMaps.Placemark(coord, {draggable: true, style: Style1}
        Mark[MarkID].description = "<div id=\""+ MarkID +"\">Описание: <br><textarea name=\"info\" maxlength=\"2000\" cols=\"25\" rows=\"3\"></textarea><br><input  type=\"button\" value=\"Удалить\"><input type=\"button\" value=\"Загрузить\"></div>";
        map.addOverlay(Mark[MarkID]
        Mark[MarkID].openBalloon(
        edit(coord);
                    YMaps.Events.observe(Mark[MarkID], Mark[MarkID].Events.BalloonOpen, function () {
                        edit(coord);
                        }
            
                        YMaps.Events.observe(Mark[MarkID], Mark[MarkID].Events.DragEnd, function (obj) {
                            coord1 = coord;
                            coord = obj.getGeoPoint(
                            newcoord(coord1, coord);
                            openBalloon;;
                            }
        MarkID++;
            }              
        }
   </script>
</head>

<body>
        <div id="YMapsID" style="width:100%;height:400px"></div>
</body>

</html>

3 комментария

удалите вызов edit(coord); там где он не нужен

и оставьте только там где он нужен

 

Дело в том что он нужен в обоих случиях. так по клику можно создавать более 1ого маркера.

 

Дело в том что он нужен в обоих случиях.

 

значит у вас все работает корректно