zoukankan      html  css  js  c++  java
  • JS实现无刷新联动菜单(select)的方法

    所谓联动菜单,就是后一个下拉框的选项是根据前一个下拉框被选中的值来决定的,一个典型的应用就是省市联动菜单了,市的下拉选项是根据你选了哪个省来决定的,类似的需求我们经常遇到,相信许多新手都被这个问题困扰过。

    其实,联动菜单的实现原理非常简单,本文详细介绍了联动菜单的实现方式,知道了原理,我们可以很容易地制作从XML、数据库加载的无限级联动菜单。

    联动菜单的实现方法:

    1、确定数据格式

    首先,我们介绍一下创建 Option 的语法:

    var newOption = new Option(optionText, optionvalue);

    根据上面的语法,我们知道 select 选项分 optionText 和 optionvalue 两个内容,optionText 即下拉框中我们看到的选项,而 optionvalue 则是提交的实际值。比如一个选项我们看到的是 “北京”,而实际提交的值是 “010”。

    为了保持一致,我们确定选项的格式为:

    {txt:"选项名", val:"选项值"}

    那么一个选项组则是:

    var childArr = [];

    childArr['父选项值1'] = [

    {txt:"选项名1", val:"选项值1"},

    {txt:"选项名2", val:"选项值2"},

    {txt:"选项名3", val:"选项值3"},

    ...

    {txt:"选项名n", val:"选项值n"}

    ]

    childArr['父选项值2'] = [

    {txt:"选项名1", val:"选项值1"},

    {txt:"选项名2", val:"选项值2"},

    {txt:"选项名3", val:"选项值3"},

    ...

    {txt:"选项名n", val:"选项值n"}

    ]

    其中“父选项值”是父下拉列表选中的值。

    注意:[ ] 和 {} 中的值是以“,” (逗号)分隔的,但是最后一个值后面不能有 “,” (逗号),否则语法错误, PHP 程序员要特别注意 !!!

    2、根据传入的数组创建选项列表

    for (var i=0; i < len; i++)

    {

    selectObj.options[i] = new Option(optionList[i].txt, optionList[i].val);

    }

    3、在设置选项之前,我们需要先将原有选项清空

    function removeOptions(selectObj)

    {

    if (typeof selectObj != 'object')

    {

    selectObj = document.getElementById(selectObj);

    }

    // 原有选项计数

    var len = selectObj.options.length;

    for (var i=0; i < len; i++)

    {

    // 移除当前选项

    selectObj.options[0] = null;

    }

    }

    注意,这里不是用 selectObj.options[i] 而是用的 selectObj.options[0] ,由于在 options[0] 删除后,后面的选项就会补上,因此,我们只需要 selectObj.options[0] = null 。

    4、设置一个提示选择项和默认选择项

    通常我们在下拉列表中会设置一个提示选择项,如:“请选择城市”,这个选项值为空,作用只是提示用户执行选择操作。

    另外,下拉列表也需要能够设置默认选择项,即在页面加载的时候,设置选中状态的项目。

    完整代码如下:

    Javascript:

    <script language="JavaScript" type="text/javascript"> 

    <!--

    /** 说明:将指定下拉列表的选项值清空

    * 作者:Sjg8.com (
    http://www.sjg8.com ) *

    * @param {String || Object]} selectObj 目标下拉选框的名称或对象,必须

    */

    function removeOptions(selectObj) {    

    if (typeof selectObj != 'object'){        

    selectObj = document.getElementById(selectObj);}      // 原有选项计数   

    var len = selectObj.options.length;     

    for (var i=0; i < len; i++)     {        

    // 移除当前选项       

    selectObj.options[0] = null;   

    } }

    /** 说明:设置传入的选项值到指定的下拉列表中

    * 作者:Sjg8.com (
    http://www.sjg8.com ) *

    * @param {String || Object]} selectObj 目标下拉选框的名称或对象,必须

    * @param {Array} optionList 选项值设置 格式:[{txt:'北京', val:'010'},

    * {txt:'上海', val:'020'}] ,必须

    * @param {String} firstOption第一个选项值,如:“请选择”,可选,值为空

    * @param {String} selected 默认选中值,可选

    */

    function setSelectOption(selectObj, optionList, firstOption, selected) {    

    if (typeof selectObj != 'object'){        

    selectObj = document.getElementById(selectObj);    

    }      // 清空选项    

    removeOptions(selectObj);      // 选项计数    

    var start = 0;          // 如果需要添加第一个选项    

    if (firstOption){        

    selectObj.options[0] = new Option(firstOption, '');    // 选项计数从 1 开始        

    start ++;    

    }     

    var len = optionList.length;     

    for (var i=0; i < len; i++) {       

    // 设置 option        

    selectObj.options[start] = new Option(optionList[i].txt, optionList[i].val);         

    // 选中项        

    if(selected == optionList[i].val){            

    selectObj.options[start].selected = true;        

    }         

    // 计数加 1        

    start ++;

    } } //-->

    </script>
  • 相关阅读:
    SGU 176.Flow construction (有上下界的最大流)
    POJ 2391.Ombrophobic Bovines (最大流)
    poj 1087.A Plug for UNIX (最大流)
    poj 1273.PIG (最大流)
    POJ 2112.Optimal Milking (最大流)
    SGU 196.Matrix Multiplication
    SGU 195. New Year Bonus Grant
    关于multicycle path
    ppt做gif动图
    codeforces 598A Tricky Sum
  • 原文地址:https://www.cnblogs.com/buffer/p/1711336.html
Copyright © 2011-2022 走看看