【问题标题】:How can I dynamically fill data to combo box depending upon another combo box value?如何根据另一个组合框值动态地将数据填充到组合框?
【发布时间】:2014-10-01 05:42:16
【问题描述】:

我是 Zend 框架的新手。现在我正在玩 Zend 形式。我需要将数据库值加载到组合框取决于另一个组合框值。

IE。当我选择一个国家/地区时,另一个组合框应该需要列出该国家/地区的州。还要从数据库中加载所有内容。

我多次尝试谷歌寻求解决方案,但我找不到任何东西。

下面是我的代码

//加载国家

$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);

【问题讨论】:

  • 你了解jquery ajax吗?
  • 是的,我知道 ajax,但我喜欢使用 zend Technic 来填充数据。有没有内置选项可以做到这一点?
  • 最近我在上一个zend项目中做了同样的事情。我在其中使用了 jquery ajax。
  • 你能分享一些示例代码吗?
  • 我已尝试向您展示示例代码。但这是非常大的代码,所以我会尽快为您提供一些抽象的想法。

标签: php zend-framework zend-form zend-db


【解决方案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;
}

由于我有带 statesAction 的 ajax 控制器,因此我可以通过以下代码查看:

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

这只是一个粗略的想法。我的代码中可能存在拼写错误,因为我是从我的项目中获取的。

希望对你有帮助。

【讨论】:

    【解决方案2】:

    这个场景你必须使用ajax,请按照这个步骤,

    1] 国家/地区下拉列表的 Onchange 向具有所选国家/地区 ID 的服务器发送 ajax 调用。 2] 获取该 countryID 的所有子记录,然后发送回调用函数。 3] 删除现有状态选择框并使用以下内容填充新条目。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多