2009-12-07 106 views
1

我如何使用窗体帮助程序处理视图中的相关组合框。例如:CakePHP中的国家/州下拉菜单

国家选择框(选择国家应筛选出所选国家的状态) 美国选择框

这应该使用Javascript/jQuery的等的帮助下,我穿过一个例子来抓发生与Cake的核心AJAX助手一样,但如果有人可以帮助一个Javascript例子,那将会非常好。

感谢

+0

@gong提供的解决方案是否为您工作?请确认! – jagamot 2011-12-13 13:24:33

回答

7

在视图/ edit.ctp

<script type="text/javascript"> 
$(document).ready(function(){ 
$('#country').change(function() { 
    $('#state').load('/controller/getStates/'+$(this).val()); 
}); 
}); 
</script> 
<select id="country" name="country"> 
<option value="1">Greece</option> 
</select> 

<span id="state"> 
<select name="state"> 
<option value=""></option> 
</select> 
</span> 

和Controller.php这样

function getStates(int countryID){ 
    $this->set('selectbox', 
    $this->State->find('list',array('conditions'=>'State.Country_id='.$countryID, 
     'fields;=>array('description'))); 
} 

和看法/ getStates.ctp

<select name="state"> 
<option value=""></option> 

<?php 
foreach($selectbox as $option) 
    echo '<option value="'.$option['id'].'">'.$option['description'].'</option>'."\n"; 
?> 
</select> 

我希望我别忘了东西

2

@ gong的解决方案效果很好。不过,别忘了补充:

$this->layout = 'ajax'; 
控制器

,并确保没有在布局文件夹干净ajax.ctp ...否则所有的布局代码将在Ajax响应返回以及刚刚下拉代码!

-2
$states = $this->State->find('list', array(
      'conditions' => array('State.country_id' =>$codePassed), 
      'order'=>array('State.stateName ASC'), 
      'fields' =>array('id','stateName'), 
      'recursive' => -1 
      )); 
    $a=''; 
    $a.= "<select name=\"state\">"; 
    $a.= "<option value=\"\">Select state</option>"; 
    foreach($states as $key=>$value){ 
     $a.="<option value=\"$key\">".$value."</option>"; 
    } 
    $a.="</select>"; 
+0

您正在控制器中构建HTML,忽略了设计用于完成该操作的助手。这不是很好的做法。另外,这并没有解决这个问题。 – 2012-10-04 01:43:51

相关问题