Как я могу динамически заполнять данные в поле со списком в зависимости от другого значения поля со списком?

Я новичок в Zend Framework. сейчас я играю с зендом. мне нужно загрузить значения базы данных в поле со списком, зависит от другого значения поля со списком.

IE. Когда я выбираю страну, в другом поле со списком должен быть указан список стран в этой стране. также все хотят загрузить из базы данных.

Я много раз пробовал Google, чтобы найти решение, но ничего не смог найти.

// Загрузка стран

$tblCoun = new Application_Model_DbTable_TblCountry();
$options = $tblComp->fetchCountiesPair();
$tblCoun = new Zend_Form_Element_Select("cmbCountry");
$tblCoun ->setLabel("Select Country")
->setRequired(true)
->setAttrib("class", "form-control span-12");
$company->addMultiOptions($options);
$tblCoun = new Application_Model_DbTable_TblCountry();
$options = $tblComp->fetchCountiesPair();

// Здесь мне нужно загрузить состояния

$tblStat = new Zend_Form_Element_Select("cmbStates");
$tblStat->setLabel("Select State")
->setRequired(true)
->setAttrib("class", "form-control span-12");
$tblStat->addMultiOptions($options);

1

Решение

Включите ваш макет и добавьте в него этот код:

<?php echo $this->docType(); ?>
<html>
<head>
<?php
$this->headLink()->setStylesheet($this->baseUrl('js/jquery/jquery-ui.min.css'));
echo $this->headLink(). PHP_EOL;
$this->headScript()->setFile($this->baseUrl('js/jquery/external/jquery/jquery.js'));
echo $this->headScript();
?>
</head>
<body>
<?php echo $this->layout()->content; ?>
</body>
</html>

Теперь перейдите к вашему виду и добавьте jquery ajax-код примерно так:

$('#country').change(function() {
//For States
$.post('<?php echo $this->baseUrl('ajax/states'); ?>', {'country': $(this).val()},
function(data) {
$('#state').html(data);
});
});

Я определил отдельный контроллер для запроса AJAX, вы можете сделать это, как вам нравится, вот пример кода:

public function statesAction() {
$this->_helper->layout->disableLayout();
$country = $this->getRequest()->getParam('country');

$countryMapper = new Application_Model_CountryMapper();
$states = $countryMapper->fetchAllStates($country);
$this->view->states = $states;
}

Поскольку у меня есть ajax Controller с StatesAction, я имею представление для этого с помощью следующего кода:

  <option value="">Select States</option>
<?php foreach($this->states as $state): ?>
<option value="<?php echo $state->value; ?>"><?php echo $state->name; ?></option>
<?php endforeach; ?>

Это просто грубая идея. В моем коде есть возможность опечатки, так как я взял ее из своего проекта.

Надеюсь, это поможет вам.

1

Другие решения

Вы должны использовать AJAX для этого сценария, пожалуйста, следуйте этим шагам,

1] Из раскрывающегося списка изменения страны отправляется ajax-вызов на сервер с выбранным идентификатором страны.
2] получить все дочерние записи для этого идентификатора страны и отправить их обратно в вызывающую функцию.
3] удалить существующее поле выбора состояния и заполнить новыми записями, используя следующие.

for(i=0; i < states.length; i++)
$("#state").append('<option value=' + states[i]['stateID'] + '>' + states[i]['name'] + '</option>');
}
0

По вопросам рекламы [email protected]