下拉选择菜单在ajax响应后丢失css样式

时间:2013-01-21 09:14:42

标签: php jquery css ajax

我有一个表单,用户可以选择他的国家/地区,然后根据所选国家/地区,表单的下拉列表(选择)将更改为该国家/地区的州/省份列表。到现在为止还挺好。问题是下拉选择表单是用CSS设置的。当页面最初加载时,一切都很完美,但是当调用ajax脚本然后更改状态/省份下拉列表时,它会返回无样式,所以基本上它会丢失所有样式。有谁知道怎么解决这个问题?代码的样式正确,出于某种原因它只是在ajax返回它时才执行它。

这是jquery代码:

function state_box(country, user_id)
{
    xmlHttp=GetXmlHttpObject();

    if (xmlHttp==null)
    {
            alert ("Browser does not support HTTP Request");
            return;
    }

    var url    = relative_path + 'states.php';
    var action    = url + '?country_id=' + country.value;

    xmlHttp.onreadystatechange = function() {
            if (xmlHttp.readyState == 4)
            {
                    var response = xmlHttp.responseText;
                    document.getElementById('stateBox').innerHTML = response;
            }
    };
    xmlHttp.open("GET", action, true);
    xmlHttp.send(null);
}

states.php的内容,基本上只返回下拉列表,没有什么花哨的:

        $display_output = '<select class="mystyle" name="dropdown" id="dropdown"> ';
        $display_output .= '<option value="" selected>Select a State</option> ';

        while ($state_details = $this->fetch_array($sql_select_states))
        {
            $display_output .= '<option value="' . $state_details['id'] . '" ' . (($selected_value == $state_details['id']) ? 'selected' : ''). '>' . $state_details['s.name'] . '</option>';
        }

        $display_output .= '</select>';

    $display_output = ($in_ajax) ? $display_output : '<div id="stateBox">' . $display_output . '</div>';

    return $display_output;

唯一的问题基本上是CSS类“mystyle”在ajax返回后没有在浏览器中格式化。

1 个答案:

答案 0 :(得分:0)

而不是生成响应中的整个选择框。只需单独生成选项并将其放入javascript中的选择框中。试试这个,

PHP Code :

$display_output = '<option value="" selected>Select a State</option> ';

while ($state_details = $this->fetch_array($sql_select_states))
{
    $display_output .= '<option value="' . $state_details['id'] . '" ' . (($selected_value == $state_details['id']) ? 'selected' : ''). '>' . $state_details['s.name'] . '</option>';
}

return $display_output;

在JAVASCRIPT中,

xmlHttp.onreadystatechange = function() {
            if (xmlHttp.readyState == 4)
            {
                    var response = xmlHttp.responseText;
                    document.getElementById('dropdown').innerHTML = response;
            }
    };

它也不会影响你的CSS和选择框。

但是我建议你和Jquery一起讨论未来的脚本要求。