Клуб API Карт

Проблемы с формой в балуне. Отправление данных несколько раз.

Innuendo108
5 июня 2011, 08:07

Есть карта, на которой пользователь оставляет указатели.

Кликнув в любом месте по карте, всплывает балун с html-формой, он заполняет название и описание и точка сохраняется.

Всплыла такая проблема. К примеру пользователь 5 раз кликнет где угодно по карте, но в форму ничего не в пишет, а просто нажмёт на крестик на балуне. А на 6-ой раз он заполнит и отправит форму. Аякс запрос почему-то отправится 6 раз! За все закрытые разы тоже.

Балун создаётся так:

      var templated    = _tpl.tmpl(self.options);
            self.html     = $("<div>").append(templated).html( ) ;
           
            // открытие балуна с формой
            map.openBalloon(
                        self.getGeoPoint(),
                        self.html
            ) ;
            // назначение событий на форму
            self.eventify( ) ;

tmpl - это jQuery Template. Он отрисован в HTML-коде страниц.

Форма субмитится так

           self.$elem.live( 'submit' , function( ) {
                console.log ( 'Submit was pressed.' ) ;
               
                $.ajax({ 
                    type         : "POST", 
                    url           : "addxy.php",
                    dataType : 'json', 
                    data        : self.getAjaxData(),
                    success   : self.callback 
                } ) ;
                return false; 
            } ) ;  //: live

P.S.

Если я первый раз добавлю точку - всё ок. Второй раз добавлю точку - уже будет 2 субмита. третий раз - три субмита. и т.д.

1 комментарий
Подписаться на комментарии к посту

Проблема решена. Дело было в неправильном использовании jQuery Template.

Я знаю, что у YMap есть свой Template, но я не нашел - разрешает ли он создавать (прописывать) шаблоны не в яваскрипт-коде, а в html'e? Просто не очень удобно засорять большой длинный html-код в яваскрипт коде (через конкатенацию строк и т.д.) - удобнее прямо в HTML красиво его написать.

Кто может столкнется с такой же проблемой, вот как я переписал:

                // Генерирование шаблона формы
            var formTemplate   = _tpl.tmpl ( self.options ) ;
                // открытие балуна с формой
            map.openBalloon( self.getGeoPoint() ) ;
                // Задаём контент балуну
            self.getBalloon().setContent( $( formTemplate ) [0] ) ;
                // сохраняем элемент формы
            self.$elem = $( self.getBalloon( ).getContent( ) ) ;
                // назначение событий на форму
            self.eventify( ) ;
                // фокус на первый элемент ввода
            _$elemToFocus( ).focus( ) ;