Список форумов Cake-PHP.ru Cake-PHP.ru
Форум программистов CakePHP
(на сайт)
 
 Watched TopicsWatched Topics   FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

$ajax->observeField не работает после перегрузки формы

 
Начать новую тему   Ответить на тему    Список форумов Cake-PHP.ru -> Общий
Предыдущая тема :: Следующая тема  
Автор Сообщение
uran26

цитировать



Зарегистрирован: 02 Апр 2009 12:13:49
Сообщения: 31
Откуда: Кировоград

СообщениеДобавлено: 02 Окт 2009 20:37:43    Заголовок сообщения: $ajax->observeField не работает после перегрузки формы Ответить с цитатой

Есть форма(Ajax и вызвана с помощью ajax запроса):

Код:

echo $ajax->form ( null, "post", array ( "url" => "/users/register", "update" => "white_space", "id" => "forma2009" ) );
...
echo $form->end ( "Register" );


В ней есть 3 select-а: Country, State, City
А к ним $ajax->observeField, который следит за изменениями в Country и подгружают списки стран и областей, заменяет блок <div id='state_city'>.
Выглядит это вот так:

Код:

echo $html->div ( "registration", null, array ( 'id' => 'country' ) );
   echo "<nobr>Страна: " . $form->select ( "User.organization_country", $countries, null, array ( 'class' => 'register', 'id' => 'country_select' ), array ( 'default' => ' - ' ) ) . "</nobr></div>";

   
   echo $html->div ( "registration", null, array ( 'id' => 'state_city' ) );
      echo $html->div ( "registration", null, array ( 'id' => 'state' ) );
      echo "<nobr>Область: " . $form->select ( "User.organization_state", $states, null, array ( 'class' => 'register', 'id' => 'state_select' ), array ( 'default' => ' - ' ) ) . "</nobr></div>";
         

      echo $html->div ( "registration", null, array ( 'id' => 'city' ) );
      echo "<nobr>Город: " . $form->select ( "User.organization_city", $cities, null, array ( 'class' => 'register', 'id' => 'city_select' ), array ( 'default' => ' - ' ) ) . "</nobr></div>";
   echo "</div>";

echo $ajax->observeField ( "country_select", array ( 'url' => '/states/getStates', 'update' => 'state_city', 'frequency' => 0.2 ) );


После выбора страны перегружается список областей и пустой список городов(так как область еще не выбрана) и добавляется еще один $ajax->observeField (он следит за выбором области)

Вид:

Код:

<?php
   echo $html->div ( "registration", null, array ( 'id' => 'state' ) );
   echo "<nobr>Область: " . $form->select ( "User.organization_state", $states, null, array ( 'class' => 'register', 'id' => 'state_select' ), array ( 'default' => ' - ' ) ) . "</nobr></div>";
   
   echo $html->div ( "registration", null, array ( 'id' => 'city' ) );
   echo "<nobr>Город: " . $form->select ( "User.organization_city", array (), null, array ( 'class' => 'register', 'id' => 'city_select' ), array ( 'default' => ' - ' ) ) . "</nobr></div>";
   
   echo $ajax->observeField ( "state_select", array ( 'url' => '/cities/getCities', 'update' => 'city', 'frequency' => 0.2  ) );
?>


Тут никаких вопросов. Выбрали страну - подгрузился список областей, выбрали область - подгрузились ее города. Все ок.
Но если произошла ошибка валидации какого-то поля, например, Имя указанно неверно, и форма перегрузилась (но не весь сайт) $ajax->observeField перестает подгружать список городов. Но список областей по прежнему отлично подгружается при смене страны(после чего и список стран начинает снова подгружаться Smile ).

Вот такие странности у меня наблюдаются.
Пробовал
Код:
echo $ajax->observeField ( "state_select", array ( 'url' => '/cities/getCities', 'update' => 'city', 'frequency' => 0.2  ) );

оставить стразу после формы, а не подгружать после - не обновляется список городов.
Только если его оставить после формы и дополнительно подгружать вместе со списком областей/городов все работает как нужно. При этом в firebug(вкладка сценарий) наблюдается столько копий сценариев EventObserver, сколько раз перегрузилась форма. Меня устраивает что оно хоть так работает, но думаю это некрасиво и неправильно.

Не встречался ли кто-то с таким? Как можно решить данный вопрос?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
uran26

цитировать



Зарегистрирован: 02 Апр 2009 12:13:49
Сообщения: 31
Откуда: Кировоград

СообщениеДобавлено: 15 Окт 2009 18:39:42    Заголовок сообщения: Ответить с цитатой

Кто-нибудь с помощью $ajax->observeField делал перезагрузку выпадающих списков?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Vlad

цитировать



Зарегистрирован: 02 Ноя 2007 11:45:52
Сообщения: 241

СообщениеДобавлено: 16 Окт 2009 00:45:15    Заголовок сообщения: Ответить с цитатой

Возможно я опять повторюсь...
По мне так проще использовать jQuery (ну или кому что нравится) и обойтись без $ajax хелперов CakePHP.
И код становится проще, и возможностей, в целом, больше.
(Как познал jquery, так забыл про $ajax)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Имя
Сообщение

Смайлики
Very Happy Smile Sad Surprised
Shocked Confused Cool Laughing
Mad Razz Embarassed Crying or Very sad
Evil or Very Mad Twisted Evil Rolling Eyes Wink
Exclamation Question Idea Arrow
Дополнительные смайлики

 
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов Cake-PHP.ru -> Общий Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы можете начинать темы
Вы можете отвечать на сообщения
Вы можете редактировать свои сообщения
Вы можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2005 phpBB Group
Русская поддержка phpBB

Рейтинг@Mail.ru