我正在使用 CakePHP 1.2.4,并且我在搜索表单中有两个搜索过滤器,它们以这种方式交互:一个下拉列表填充了国家,另一个 ddl 填充了第一个 ddl 中选择的国家/地区的州。
这是用ajax完成的
当在搜索表单中使用它们时刷新页面时,我需要调用 ajax 函数,否则不会再次填充状态 ddl。
这些下拉列表也用于其他类型的视图。例如,在 edit_address.ctp 页面上,打开页面时选择的值将是保存在数据库中的值。
但是,在 edit_address.ctp 页面上,我不需要更新刷新(或 onload)时的值,因为除非用户手动更改国家/地区,否则我不希望更新状态。
$('.ajaxSelect').each(function(){
$(this).change(function(){
updateSelect($(this));
});
//call function on load only for filters in a search form
if($(this).closest('.frmSearch').length > 0){
if($(".ajaxSelect option:selected").text() != ""){
$(this).change(updateSelect($(this))).change();
}
}
})
它可以很好地使用此功能,但是在 edit_address.ctp 中,如果用户更改国家/地区(不保存)并刷新页面,状态将重置为与默认国家/地区匹配,但所选国家/地区仍然是刷新前选择的国家/地区,因此州不再与国家匹配。
这是国家过滤器的示例
<select id="AddressCountryId" class="ajaxSelect" linked="AddressRegionId" method="getRegion" name="data[Address][country_id]">
状态过滤器
<select id="AddressRegionId" name="data[Address][region_id]">
var_dump($_POST) 刷新时为空,因此我无法在地址控制器中以这种方式访问选定的值。
我能想到的另一件事是,在上面的 ajax 函数中,通过调用模型中的方法来检查视图中选定的状态是否与选定的国家/地区匹配。这是正确的方法吗?我应该在 ajax 控制器中创建一个新函数来访问模型函数吗?
简而言之,只要选择的值不是来自数据库(除非用户手动选择另一个国家/地区),如果有意义的话,我希望使用 ajax 更新状态列表
我可能缺少一些关键概念。请随意询问精度,因为它可能会令人困惑,谢谢
编辑:我猜这可能不是何时进行ajax调用的问题,而是如何在刷新后保留下拉列表值及其选择的值(也编辑了标题)