Клуб API Карт

YMapsML

Пост в архиве.

Здравствуйте, у меня такой вопрос. Загружаю данные (метки из xml файла), они добавляются на карту. В балунах при открытии имеется кнопка с id="point_temp". 

Вопрос как на эту кнопку повесить хотя бы какой нибудь onclick для обработки

чтобы например обработать событие и отправить данные на сервер по ajax. В балуне формитуется форма form id="form_temp"

вот примерный фрагмент кода...

                    //нажали на кнопку удалить на балуне (этот код на любой странице)

                    $('#form_temp').submit(function()

                    {               

                            //выполняем ajax запрос

                            $.ajax(

                            {

                                type: "POST",

                                cache: false,

                                url: "../php/test.php",

                                data: 

                                "namepoint="+$("#namepoint").val()+ "&"+ 

                                "descriptpoint="+$("#descriptpoint").val(),

                               

                                beforeSend: function()

                                {

                                    alert("Обработка данных");   

                                },

                                success: function(html)

                                {

                                    alert("Данные отправлены всё хорошо");   

                                    map.removeOverlay(test);

                                }

                            });

                            return false;

                    });

P.S. Может я непонятно излагаю, это моё первое сообщение, посмотрел по темам клуба ничего похожего не увидел. Прошу совета как можно это реализовать. Спасибо

16 комментариев

а как эта форма попадает в балун?

вообщем не очень понятно что и как вы делаете

есть ссылка?

Балун формируется из xml файла:

Фрагмент xml файла...


           

ссылки нет, пока тестирую на localhost.

На событие клика по метке или открытия балуна повесить обработчик через апи, который будет вешать обработчики на содержание балуна.

mark.observer =  YMaps.Events.observe(mark, mark.Events.Click,
                    function (mark, event){
                mark.openBalloon();
                $('#sight_point').click(function(e) {
                    mark.closeBalloon()
                return false
                });

Про то как получить метку из хмл в виде объекта поищите тему в клубе.


Данный пример не работает т.к. метки создаются и добавляются с помощью

YMapsML

В шаблоне балуна id кнопки постоянное и данные добавляются в диспетчер обьектов

points = new YMaps.YMapsML(src_file, { viewAutoApply : false});

objManager = new YMaps.ObjectManager();

points.get(0).forEach(function (obj)
{

objManager.add(obj);

....

}

map.addOverlay(objManager);

.... не могу понять принцип обращения к элементу в балуне и обработку события на нём.

id должен быть уникальным на всей странице

в вашем случае лучше на css класс навешивать событие

Обращение как к любому дом элементу.  Только этот объект создается в момент открытия балуна.  Так, что обработчики клика на элементе надо вешать после открытия балуна.

Вешаю обработчик на открытие балуна пытаюсь повесить обработчик на кнопку в балуне, но ничего не выходит, что я неправильно делаю или изначально если точки загружены с помощью YMapsML это невозвожно?

 

Пример кода:

 

//Вешаем событие при открытии балуна

 

YMaps.Events.observe(map,map.Events.BalloonOpen, function ()

{

    //получаем ссылку на открытый балун

     var balloon = map.getBalloon();

    //обрабатываем клик на балуне     

    YMaps.Events.notify(balloon, balloon.Events.Click)

    {

        //пытаемся повесиль обработчик на кнопку в балуне, которая создана из YMapsML 

    $('#cod_delete').click(function() 

    {

        alert("Обработчик установлен правильно!!!");

    });

     };

});

 

 

//Обработчик не отрабатывает...

 

 


 

//Обработчик не отрабатывает...

 

нужна ссылка на страницу с проблемой

вот сылка на страницу www.vezu-nesu.ru после добавления точки их можно посмотреть на карте, чтобы удалить точку нужно открыть балун и нажать кнопку удалить... не получается повесить обработчик на эту кнопку, балун создаётся в xml:

...........

 

                

 

...........................

 

далее обработчик: 

 

 

 

 

или данный способ никогда не отработает???

 

 

 

 

 

 

 

 

 

 

 

у вашей кнопки нет id="deletePointButton"

там есть name="deletePointButton"

соответсвенно нужно поменять селектор

И у кнопки нет события submit

нужно слушать клик

deletePointButton - это кнопка отправки данных (из формы) на сервер...

$('#deletePointButton').submit(function()

{.....}//'это отправка содержимого формы (jquery)

добавил простую ссылку в шаблон удалить(тест)

слушаю клик по ссылке:

//Клик на ссылке в балуне
$('#test_delete').click(function()
{
     alert("test_delete работает ))");
}); //эффекта нет

 картинка Это балун уже добавленной точки, а не балун добавления точки.... Подскажите пожалуйста в чём может быть причина.

 я уже писал что 
у кнопки нет события submit

извиняюсь я ошибся.....

У кнопки нет, но в шаблоне  кнопка отправляет данные, как это сделано в балуне добавления точки.

//нажали на кнопку добавить на балуне
$('#formadd').submit(function()
{

....//точка добавлена

}              

В балуне просмотра точки всё сделано по такому же принципу....

//обработка при открытии балуна   
YMaps.Events.observe(map,map.Events.BalloonOpen, function(map,mEvent)
 {
//Отправка данных из формы
$('#formdelete').submit(function()
{
alert("formdelete отправлено");
});
//Клик на ссылке в балуне
$('#test_delete').click(function()
{
alert("test_delete работает ))");
});
//Клик на кнопке в балуне
$('#but_test').click(function()
{
alert("but_test работает ))");
});
});

но суть проблемы это не меняет, я пробовал вешать click на ссылку, кнопку и submit на форму -  нет никакой реакции.

значит YmapsML обрезает некоторые теги html...

да там санитайзер вырезает js из форм

возможно и еще чтото

вы откройте firebug и посмотрите какая там разметка в результате получилась

//Обработчик не отрабатывает...

С таким симптомом могу посоветовать включить компьютер в розетку. Если лень подумать, воткните алерт с номером после каждой строчки и смотрите, что выполняется и в каком порядке. И не забывайте поглядывать в консоль ошибок.


//Вешаем событие при открытии балуна

YMaps.Events.observe(map,map.Events.BalloonOpen, function ()

 

Это обработчик на открытие балуна, он срабатывает?

//обрабатываем клик на балуне     

    YMaps.Events.notify(balloon, balloon.Events.Click)

 

Коммент противоречит строке. Да и вообще этот обработчик вам не нужен.

Если обработчик на открытие балуна сработал, то в него сразу вставляете:

$('#cod_delete').click(function(){}