牛骨文教育服务平台(让学习变的简单)
博文笔记

PHP-二级联动下拉菜单之Form提交法实现

创建时间:2007-02-14 投稿人: 浏览次数:12676

 author : lzb

2007-02-14

呵呵,马上就要过年了,在这里先给大家拜年了,过年好!

遥想当年,这个小问题也困扰了我很久,现在写出来,跟大家分享一下。 本文主要是讲利用form提交方法实现 PHP-二级联动下拉菜单,当然现在有更好的选择,ajax实现无刷新的联动,不过在这里不做介绍。

原理: 呵呵,其实也谈不上什么原理,就是在用户选择一次的时候是让表单实现一次提交,不过不是提交给别人,而是提交给自己,然后利用PHP处理提交的值(即用户选择的值),根据用户选择的值进行筛选,得到下一个选择下拉框的值,并将其重新显示到页面上。

注意: 可千万不要忘了,提交后显示时要保存住用户选择时的值啊。

实现:

       1.如何实现在用户选择的时候实现一次提交呢,而且还是提交给自己呢?

          呵呵,这个问题很简单。在用户的选择变化时就会触发select的onchange事件,只要在这个事件里利用2句javascript代码就可以实现提交给自己了。鉴于方便,我将这2句js写在一个函数里面,如下:

 

    //*** 提交给自身
    function refresh()...{
                                           //设置表单的action属性,让它指向自己
        test.action = location.href;
                                           //提交表单
        test.submit();
    }

上面代码中的test是包含选择下拉框的表单名,这个你可以根据你的需要,随边设定,当然也可以把它作为函数的参数传进来,我为了省事儿,就直接写死在里面了,呵呵。

          2.接下来就是PHP的实现了,我将代码封装在一个类里面,在这里我就不想详细的讲了,只说明一下几个重要函数,然后把代码贴出来,大家自己看看吧。看函数说明时,最好参照代码。

            function createList :此函数是用于生成选择下拉框的,此函数功能远不止这个,要仔细的看哦。$selected_value这个参数要重点提一下,他就是用来保存用户选择的值的。

            function selectFirst :此函数是通过用户提交的值进行筛选。

            function showList   :此函数是将下拉框显示到页面,注意:他的参数$arg只能传$_POST哦。

php代码如下:

 

<?php
//定义默认值
define ("NO_SELECTED","--------");

/***
    class    : createSelectList
    function : 实现二级联动下拉选择框
    create   : lzb 2007-02-14
 **/
class createSelectList{
    
    //第一级下拉框
    var $select1;
    //第二级下拉框(辽宁)对应的选项
    var $select2_LN;
    //第二级下拉框(其他)对应的选项
    var $select2_OT;

    var $list;
    
    /**
        function : 构造函数
        argument : 无
        create   : lzb 2007-02-14
     */
    function createSelectList(){
        //初始化第一级下拉框的值
        $this->select1 = array();
        $this->select1["title"] = array(
                                            NO_SELECTED,
                                            "辽宁",
                                            "其他");
        $this->select1["value"] = array(
                                            "none",
                                            "LN",
                                            "OT");
        $this->select1["count"] = 3;

        //初始化第二级下拉框的值
        //第一级下拉框中“辽宁”选项对应的值
        $this->select2_LN = array();
        $this->select2_LN["title"] = array(
                                            NO_SELECTED,
                                            "大连",
                                            "沈阳",
                                            "瓦房店");
        $this->select2_LN["value"] = array(
                                            "none",
                                            "DL",
                                            "SH",
                                            "WFD");
        $this->select2_LN["count"] = 4;

        //第一级下拉框中“其他”选项对应的值
        $this->select2_OT = array();
        $this->select2_OT["title"] = array(
                                            NO_SELECTED,
                                            "美国",
                                            "英国");
        $this->select2_OT["value"] = array(
                                            "none",
                                            "USA",
                                            "UK");
        $this->select2_OT["count"] = 3;

        //
        $this->list = array();
    }

    /**
        function : 创建选择下拉框
        argument : 1.$name                选择下拉框名称
                   2.$value                
                   3.$title                
                   4.$count                下拉项的个数
                   5.$selected_value    当前选中的值
                   6.$onchange            是否要联动
        create   : lzb 2007-02-14
     */
    function createList($name, $value, $title, $count, $selected_value, $onchange = FALSE) {
        if ($onchange == TRUE) {
            echo "<select name="{$name}" onChange="refresh()"> ";
        } else {
            echo "<select name="{$name}"> ";
        }
        for ($i = 0; $i < $count; $i++) {
            if ($value[$i] == $selected_value) {
                echo "<option value="{$value[$i]}" selected>{$title[$i]}</option> ";
            } else {
                echo "<option value="{$value[$i]}">{$title[$i]}</option> ";
            }
        }
        echo "</select> ";
    }

    /**
        function : 根据第一级下拉框进行塞选
        argument : $select_value1    第一级选择框选中的值
        create   : lzb 2007-02-14
     */
    function selectFirst($select_value1) {

        switch ($select_value1){
            case "LN":
                $this->list = $this->select2_LN;
                
                break;

            case "OT":
                $this->list = $this->select2_OT;

                break;

            case "none":

            default:
                $this->list["title"] = array(NO_SELECTED);
                $this->list["value"] = array("none");
                $this->list["count"] = 1;

                break;
        }

        return $this->list;
    }

    /**
        function : 显示二级联动下拉框
        argument : $arg 调用时传$_POST
        create   : lzb 2007-02-14
     */
    function showList($arg) {

        //设置选择下拉框的默认值
        if (!isset ($arg["select1"])) {
            $arg["select1"] = "none";
        }
        if (!isset ($arg["select2"])) {
            $arg["select2"] = "none";
        }

        //创建第一级下拉框
        $this->createList("select1", $this->select1["value"], $this->select1["title"], $this->select1["count"],$arg["select1"], true);

        //根据第一级下拉框塞选第二级下拉框的值
        $list = $this->selectFirst($arg["select1"]);
        
        //创建第二级下拉框
        $this->createList("select2", $list["value"], $list["title"], $list["count"],$arg["select2"]);

    }
}
?>

 

 测试代码:

 


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> Test </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="lzb">
<META http-equiv="Content-Type" content="text/html; charset=GB2312">

<script language="javascript">
    //*** 提交给自身
    function refresh(){
        test.action = location.href;
        test.submit();
    }
</script>

</HEAD>

<BODY>
<FORM name="test" method="POST">
<?php
    //测试
    require_once("createSelectList.php");

    $show = new createSelectList();

    $show->showList($_POST);
?>
</FORM>
</BODY>
</HTML>

 

呵呵,本实例是以数组实现的,由于在实现多级联动且下拉框的项过多时,进行筛选,数组有些麻烦,故仅仅作了个2级联动的,日后如果有时间的话,我会继续更新多级联动选择下拉框(以更为常用的数据库代替数组进行实现),当然,原理都是一样的,如果大家有兴趣的话也可以自己试着做做。

以上如果有什么错误的话,还希望大家及时帮我纠正,如果有什么问题,可以随时联系我,^_^

 
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。