通过切换页面引用的js文件实现下拉框的联动

在之前的项目之中,页面最高的角色级别是城市级,一个页面最多是展示一个城市的信息。

因此为每个城市创建了一个js文件,在其中存放此城市的信息,如图:

在此我们关注js文件中存放的区县信息,以北京为例,其区县信息如图:

var Districts=[{name:‘昌平‘,index:0},{name:‘朝阳‘,index:1},{name:‘崇文‘,index:2},{name:‘大兴‘,index:3},{name:‘东城‘,index:4}];

由于之前的页面最多加载某一城市的js文件,Districts在此处被简单的定义为全局变量。

现在需要做一个汇总的页面,其中有城市下拉框和区县下拉框,且需要实现两个下拉框的联动。

实现方法:

由于各城市js文件全局变量Districts命名冲突,考虑到项目当前状况,我采取的方式是:每当在下拉框选择某一城市,就移除之前的城市js文

件,加载当前城市的js文件,并将区县信息填充到区县下拉框。城市下拉框选择城市后触发的方法代码如下:

       //城市js脚本
        var cityscript;
       //获得区县下拉列表
        var GetDistrict = function () {
            var city = $("#CitySelect").val();
            //将相对路径转换为绝对路径
              var citybasepath = ‘@ContentMap.JsContent("Js/City/{script}")‘;
            if (cityscript) {
                document.body.removeChild(cityscript);
            }
            cityscript = document.createElement("script");
            cityscript.type = "text/javascript";
            cityscript.charset = "gb2312";

            cityscript.src =citybasepath.replace("{script}",city+"city.js");
            document.body.appendChild(cityscript);
            //给予时间解析js文件后 再填充区县下拉框
              window.setTimeout(FillDistrict, 100);
        };

需要注意的是:

1.定义一个变量cityscript用来存放引用城市js文件的script对象,这样做在切换城市的时候可以很方便的将之前的js文件移除。

2.ContentMap.JsContent 是将相对路径变成绝对路径的一个方法(项目使用asp.net mvc),使用”{script}”字符串进行占位是因为不能向

后台的方法ContentMap.JsContent传入js变量且转换成绝对路径之后会有版本号的后缀。

3.引用新的js文件后,给出浏览器足够的时间解析文件,然后再填充区县下拉框。

填充区县下拉框的方法代码非常基础,如下所示:

       var FillDistrict = function () {
            if (Districts) {
                $("#DistrictSelect").empty();
                $("#DistrictSelect").append("<option index=‘-1‘ value=‘‘>区县</option>");
                for (var i = 0; i < Districts.length; i++) {
                    $("#DistrictSelect").append("<option index=‘" + Districts[i].index + "‘ value=‘" + Districts[i].name 
                      + "‘>" + Districts[i].name + "</option>");
                }
            } else {
                alert("获取城市区县数据失败!");
            }
        };

总结:

总的来说频繁的切换js文件的引用并非正道,只是当前项目环境下一种快速实现功能的妥协方式。

如果各城市的区县信息变量的名称按城市区分,并放在一个js文件之中,实现起来就更加轻松愉快了。

这也提醒我们在项目设计的时候就应该全面的考虑以后可能出现的需求,更加合理的设计变量和文件结构。

(期待各位大神给出宝贵意见和建议)

时间: 2024-09-30 11:53:57

通过切换页面引用的js文件实现下拉框的联动的相关文章

JS为Select下拉框增加输入功能

JavaScript使用parentNode.nextSibling.value实现的本功能,实际上你会发现网页上有两个控件元素,一个是Select,一个是input,使用CSS将input覆盖于select之上,再使用JS将下拉框的值赋值给input,实际上是用input模拟出了select的功能,思路很新颖,也不知到底有多少人需要select可输入文字的功能,下面是详细的实现代码:前端资源分享 .代码   <div style="position:relative;">

js动态获取下拉框的数据(搜索条件之间互相影响)

前提:在开发的过程当中,我们常常会遇到这种问题:某个查询列表的查询条件之间互相影响,比如现在有两个搜索条件(下拉),一个需要显示小组名称,另一个是根据这个小组名称查找到对应的小组内人员.那么该如何实现呢? 原理:我们暂且将这三个下拉列表起名为A,B,C. 他们之间的依赖关系是:B的值随着A的变化而变化,C的值随着A,B的变化而变化.我们要做的就是: 1. 进入页面的时候只为A赋值,将B和C都清空. 2. 每次点击A的时候就将B和C的下拉框中的内容先清空再给B赋值. 3. 每次点击B的时候,将C的

js,jquery获取下拉框选中的option

js获取select选中的值: var sel=document.getElementById("select1"); var index = sel.selectedIndex; // 选中索引 albumid= sel.options[index].value;//要的值 jQuery获取下拉框选中的option: $("#s option:selected").val();

JS为Select下拉框添加输入功能

JavaScript使用parentNode.nextSibling.value实现的本功能,实际上你会发现网页上有两个控件元素,一个是Select,一个是input,使用CSS将input覆盖于select之上,再使用JS将下拉框的值赋值给input,实际上是用input模拟出了select的功能,思路非常新颖,也不知究竟有多少人须要select可输入文字的功能,以下是具体的实现代码:前端资源分享 .代码   <div style="position:relative;">

利用js取到下拉框中选择的值

现在的需求是:下拉框中要是选择加盟商让其继续选择学校,要是选择平台管理员则不需要选择学校.隐藏选择下拉列表. 选择枚举值: /// <summary> /// 平台角色 /// </summary> public enum AdministratorRole { [Display(Name = "平台管理员")] PlatformAdministrator = 1, [Display(Name = "加盟商")] JoiningTrader

JS封装的下拉框

根据拼音首字母查询课程 调用: var test2 = new ShangShu.Course.Select(1, 'test2',data); test2.init();参数:1. 1----排列的序号,当调用多个,显示在最前不会被覆盖2. test2----附加在此ID下的文本框下3. data-----数据 HTML代码: <script type="text/javascript" src="./ShangShu/jquery.js"></

Vue.js模拟百度下拉框

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>智能社--http://www.zhinengshe.com</title> 6 <style> 7 .gray{ 8 background: #ccc; 9 } 10 </style> 11 <script

JS操作select下拉框动态变动(创建/删除/获取)

1.动态创建select function createSelect(){ var mySelect = document.createElement_x("select"); mySelect.id = "mySelect"; document.body.appendChild(mySelect); } 2.添加选项option function addOption(){ //根据id查找对象, var obj=document.getElementByIdx_x

下拉框多级联动辅助js,优化您的下拉框

function IniteSelect(options) { $("body").IniteSelect(options) } (function ($) { $.fn.IniteSelect = function (options) { var option = $.extend({}, { ids: [], swType: [], callBack: [], guid: "", BaseUrl: "/ashx/DropDownControl.ashx