刷新时保持下拉列表选定值

时间:2012-07-16 19:41:20

标签: php ajax drop-down-menu

我正在使用CakePHP 1.2.4,我在搜索表单中有两个搜索过滤器以这种方式交互:下拉列表中填充了国家/地区,另一个ddl填充了第一个ddl中所选国家/地区的状态。 / p>

这是通过ajax

完成的

当页面在搜索表单中使用时,我需要在刷新页面时调用ajax函数,否则状态ddl不会再次填充。

这些下拉列表也用于其他类型的视图。例如,在edit_address.ctp页面上,打开页面时选择的值将是保存在数据库中的值。

但是,在edit_address.ctp页面上,我不需要更新refresh(或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调用,而是如何在刷新后保留下拉列表值及其选定值(编辑标题)

1 个答案:

答案 0 :(得分:0)

HTTP 无状态。因此,当您刷新浏览器时,它是一个新的HTTP请求,并且它不知道下拉列表中所选项目是什么。

一种可能的解决方法是将状态存储在某些持久性介质中。会话变量,数据库是您可以想到的两个选项。