Привет, перерыл весь поиск, но так и не нашел ответа.
Проблема в следующем, после удаления точки из группы, при последующем
перемещении карты, новые точки создаются не по клику, а именно
по перемещению карты, до удаления точек все отлично, вот живой пример:
http://agp.lifeprom.com/add_point.php
// Создание обработчика для события window.onLoad
var map, geoResult;
// счетчик в 0
counter = 0;
YMaps.jQuery(function () {
// Создаем группу
points = new YMaps.GeoObjectCollection("default#whitePoint");
// Создание экземпляра карты и его привязка к созданному контейнеру
map = new YMaps.Map(YMaps.jQuery("#YMapsID")[0]);
// Установка для карты ее центра и масштаба
map.setCenter(new YMaps.GeoPoint(36.228644, 50.006063), 13);
map.addControl(new YMaps.TypeControl());
map.addControl(new YMaps.Zoom());
map.addControl(new YMaps.ScaleLine());
map.enableScrollZoom();
options = {draggable: true};
// Создаем точку на карте по клику мыши
YMaps.Events.observe(map, map.Events.Click, function (map, mEvent) {
coord_start = mEvent.getGeoPoint();
coord_x = coord_start.getX();
coord_y = coord_start.getY();
var placemark = new YMaps.Placemark(mEvent.getGeoPoint(), options);
var geocoder = new YMaps.Geocoder(new YMaps.GeoPoint(coord_x, coord_y), {results: 1});
// Обработчик успешного завершения процесса геокодирования
YMaps.Events.observe(geocoder, geocoder.Events.Load, function () {
if (this.length()) {
geoResult = this.get(0);
getOptions(geoResult);
placemark.description = coord_start;
placemark.setIconContent(descr_r);
add_point(coord_start, descr_result);
points.add(placemark);
map.addOverlay(points);
drag(placemark);
counter++;
} else {
alert("Nothing found")
}
});
// Процесс геокодирования завершен неудачно
YMaps.Events.observe(geocoder, geocoder.Events.Fault, function (geocoder, error) {
alert("Error: " + error);
});
});
});
// Функция для отображения результата геокодирования
// Параметр value - адрес объекта для поиска
function showAddress (value) {
// Запуск процесса геокодирования
var geocoder = new YMaps.Geocoder(value, {results: 1, boundedBy: map.getBounds()});
// Создание обработчика для успешного завершения геокодирования
YMaps.Events.observe(geocoder, geocoder.Events.Load, function () {
if (this.length()) {
geoResult = this.get(0);
coord = geoResult.getGeoPoint();
getOptions(geoResult);
var placemark = new YMaps.Placemark(coord, options);
placemark.description = coord;
placemark.setIconContent(descr_r);
add_point(coord,descr_result);
points.add(placemark);
map.addOverlay(points);
map.setBounds(geoResult.getBounds());
counter++;
drag(placemark);
} else {
alert("Nothing found")
}
});
// Процесс геокодирования завершен неудачно
YMaps.Events.observe(geocoder, geocoder.Events.Fault, function (geocoder, error) {
alert("Error: " + error);
});
}
// Получение имени и описания точки
function getOptions(geoResult) {
descr = geoResult.text;
descr_arr = descr.split(", ");
if (!descr_arr[4]) descr_arr[4] = "";
if (descr_arr[5]) descr_arr[5] = ", "+descr_arr[5]; else descr_arr[5] = "";
if (!descr_arr[4] && !descr_arr[5]) descr_result = descr_arr[3];
else descr_result = descr_arr[4]+descr_arr[5];
if (!descr_result) descr_result = descr_arr[2]
descr_r = '<div id="pointmap-'+counter+'"><nobr>'+descr_result+'</ nobr></div>';
}
// перетаскивание точки
function drag(placemark) {
YMaps.Events.observe(placemark, placemark.Events.Drag, function (obj) {
coord = obj.getGeoPoint();
integ = obj.getIconContent();
integ = integ.split('"');
integ = integ[1].split('-');
integ = integ[1];
$("#point-"+integ+" .coord").html("<div>"+coord+"</div>");
});
YMaps.Events.observe(placemark, placemark.Events.DragEnd, function (obj) {
// Устанавливает содержимое балуна
coord = obj.getGeoPoint();
integ = obj.getIconContent();
integ = integ.split('"');
integ = integ[1].split('-');
integ = integ[1];
placemark.description = coord;
$("#point-"+integ+" .coord").html("<div>"+coord+"</div>");
$(".coord-"+integ).attr("value", coord);
obj.update();
});
}
// Добавление точки в левую колонку
function add_point(coord,descr_result) {
text = '<li id="point-'+counter+'"><div class="close"></div><form onsubmit="closeEdit();return false;"><div class="name"><input name="name-'+counter+'" type="text" value="'+descr_result+'" /></div>'+'<div class="coord">'+coord+'</div><input name="coord-'+counter+'" class="coord-'+counter+'" type="hidden" value="'+coord+'" /></form></li>';
$(text).appendTo(".list-point");
}
// Сбрасываем редактирование
function closeEdit() {
$(".list-point li").removeClass("edit");
$(".none").focus();
}
// Общие действия
$(document).ready(function(){
$(".list-point li").live('click', function() {
$(this).find(".name input").focus();
});
$(".list-point input").live('focus', function(){
$(this).parents("li").addClass("edit");
}).live('blur', function(){
$(".list-point li").removeClass("edit");
integr = $(this).attr("name");
integr = integr.split('-');
integr = integr[1];
val = $(this).val();
points.get(integr).setIconContent('<div id="pointmap-'+integr+'"><nobr>'+val+'<nobr></div> ');
});
// удаляем точку
$(".close").live('click', function() {
integr = $(this).parents("li").find(".name input").attr("name");
integr = integr.split('-');
integr = integr[1];
points.remove(points.get(integr));
$(this).parents("li").remove();
points.forEach(function (obj, objIndex, group) {
repl = obj.getIconContent().charAt(18);
new_name = obj.getIconContent().replace('pointmap-'+repl, 'pointmap-'+objIndex);
obj.setIconContent(new_name);
});
$(".list-point li").each(function(i) {
$(this).attr("id", "point-"+i);
$(this).find("input").attr("name", "coord-"+i).attr("class", "coord-"+i);
$(this).find(".name input").attr("name", "name-"+i).removeAttr("class");
});
counter--;
});
// изменение размера объектов
function resize_all() {
h = $(window).height()-175;
w = $(window).width()-340;
$(".points").css({height: h});
$(".map").css({height: $(window).height(), width: w});
}
$(window).resize(function(i){
resize_all();
});
});