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 перестает подгружать список городов. Но список областей по прежнему отлично подгружается при смене страны(после чего и список стран начинает снова подгружаться ).
Вот такие странности у меня наблюдаются.
Пробовал
Код: | echo $ajax->observeField ( "state_select", array ( 'url' => '/cities/getCities', 'update' => 'city', 'frequency' => 0.2 ) ); |
оставить стразу после формы, а не подгружать после - не обновляется список городов.
Только если его оставить после формы и дополнительно подгружать вместе со списком областей/городов все работает как нужно. При этом в firebug(вкладка сценарий) наблюдается столько копий сценариев EventObserver, сколько раз перегрузилась форма. Меня устраивает что оно хоть так работает, но думаю это некрасиво и неправильно.
Не встречался ли кто-то с таким? Как можно решить данный вопрос? |
|