设置联动的<select></select>下拉选项菜单的默认值

本文介绍了一个基于JavaScript的地区选择器实现方案,通过动态加载地区数据并根据用户选择更新选项,适用于电商平台等需要用户填写详细地址的场景。
送货地址/收货人:
    <span id="region">
      <select class="w110">
      </select>
      <input type="hidden" value="" name="city_id" id="city_id">
      <input type="hidden" name="area_id" id="area_id" class="area_ids"/>
      <input type="hidden" name="area_info" id="area_info" class="area_names"/>
      <label for="area_info" generated='true' class="error"></label>
    </span>
function regionInit(divId){
var area_id = 0; //0是省份  如果设置值为19 则只有广东的各个市
getArea(function(){
    if(typeof(nc_a[area_id]) == 'object' && nc_a[area_id].length > 0){//数组存在
        var area_select = $("#" + divId + " > select");//选择要初始化的对象
        areaInit(area_select,area_id);
    }

    $("#" + divId + " > select").change(regionChange); // select的onchange事件
    $("#" + divId + " > input:button[class='edit_region']").click(regionEdit); // 编辑按钮的onclick事件
});}

function areaInit(area_select,area_id){//初始化地区
getArea(function(){
    if(typeof(area_select) == 'object' && nc_a[area_id].length > 0){
        var areas = new Array();
        areas = nc_a[area_id];
        $(area_select).append("<option>-请选择-</option>");
        for (i = 0; i <areas.length; i++){
            $(area_select).append("<option value='" + areas[i][0] + "'>" + areas[i][2] + "</option>");
        }
    }
});}

if(typeof(regionChange) != 'function'){//检测是否已经被定义过,防止重写
function regionChange(){
    // 删除后面的select
    $(this).nextAll("select").remove();
    // 计算当前选中到id和拼起来的name
    var selects = $(this).siblings("select").andSelf();
    var id = '';
    var names = new Array();
    for (i = 0; i < selects.length; i++){
        sel = selects[i];
        if (sel.value > 0){
            id = sel.value;
            name = sel.options[sel.selectedIndex].text;
            names.push(name);
        }
    }
    $(".area_ids").val(id);
    $(".area_name").val(name);
    $(".area_names").val(names.join("\t"));

    if (this.value > 0){//下级地区
        var area_id = this.value;
        if(typeof(nc_a[area_id]) == 'object' && nc_a[area_id].length > 0){//数组存在
            $("<select></select>").change(regionChange).insertAfter(this);
            areaInit($(this).next("select"),area_id);//初始化地区
        }
    }
}}

function regionEdit(){
$(this).siblings("select").show();
$(this).siblings("span").andSelf().hide();}
function gcategoryEdit(){
$(this).siblings("select").show();
$(this).siblings("span").andSelf().remove();}
if(typeof(jQuery.validator.addMethod) == 'function'){//添加自动检测是否是最后一级地区
jQuery.validator.addMethod("checkarea", function(value, element) {
    return this.optional(element) || (typeof(nc_a[value]) == 'undefined');//当数组不存在时确定选到最后
}, "请选择所在地区");}

function getArea(callback){
if(typeof(nc_a) == 'undefined'){//加载地区数据
    var area_scripts_src = '';
    area_scripts_src = $("script[src*='jquery.js']").attr("src");//取JS目录的地址
    area_scripts_src = area_scripts_src.replace('jquery.js', 'area_array.js');
    $.getScript(area_scripts_src,function(){
            callback();
            return true;
    });
} else {
    callback();
}}

//显示一级分类下拉框
function show_gc_1(depth,gc_json){
var html = '<select name="search_gc[]" id="search_gc_0"                     nc_type="search_gc" class="querySelect">';;
html += ('<option value="0">请选择...</option>');
if(gc_json){
    for(var i in gc_json){
        if(gc_json[i].depth == 1){
            html += ('<option value="'+gc_json[i].gc_id+'">'+gc_json[i].gc_name+'</option>');
        }
    }
}
html += '</select>';
$("#searchgc_td").html(html);}

   //显示子分类下拉框
function show_gc_2(chooseid,gc_json){
if(gc_json && chooseid > 0){
    var childid = gc_json[chooseid].child;
    if(childid){
        var html = '<select name="search_gc[]" id="search_gc_'+gc_json[chooseid].depth+'" nc_type="search_gc" class="querySelect">';;
        html += ('<option value="0">请选择...</option>');
        var childid_arr = childid.split(",");
        if(childid_arr){
            for(var i in childid_arr){
                html += ('<option value="'+gc_json[childid_arr[i]].gc_id+'">'+gc_json[childid_arr[i]].gc_name+'</option>');
            }
        }
        html += '</select>';
        $("#searchgc_td").append(html);
    }
}}
nc_a = new Array();
nc_a[0]=[['1','北京'],['2','天津'],['3','河北省'],['4','山西省'],['5','内蒙        古自治区'],['6','辽宁省'],['7','吉林省'],['8','黑龙江省'],['9','上海'],['10','江苏省'],['11','浙江省'],['12','安徽省'],['13','福建省'],['14','江西省'],['15','山东省'],['16','河南省'],['17','湖北省'],['18','湖南省'],['19','广东省'],['20','广西壮族自治区'],['21','海南省'],['22','重庆'],['23','四川省'],['24','贵州省'],['25','云南省'],['26','西藏自治区'],['27','陕西省'],['28','甘肃省'],['29','青海省'],['30','宁夏回族自治区'],['31','新疆维吾尔自治区'],['32','台湾省'],['33','香港特别行政区'],['34','澳门特别行政区'],['35','海外']];
nc_a[1]=[['36','北京市']];
nc_a[2]=[['40','天津市']];
nc_a[3]=[['73','石家庄市'],['74','唐山市'],['75','秦皇岛市'],['76','邯郸    市'],['77','邢台市'],['78','保定市'],['79','张家口市'],['80','承德市'],['81','衡水市'],['82','廊坊市'],['83','沧州市']];
nc_a[4]=[['84','太原市'],['85','大同市'],['86','阳泉市'],['87','长治市'],['88','晋城市'],['89','朔州市'],['90','晋中市'],['91','运城市'],['92','忻州市'],['93','临汾市'],['94','吕梁市']];
nc_a[5]=[['95','呼和浩特市'],['96','包头市'],['97','乌海市'],['98','赤峰市'],['99','通辽市'],['100','鄂尔多斯市'],['101','呼伦贝尔市'],['102','巴彦淖尔市'],['103','乌兰察布市'],['104','兴安盟'],['105','锡林郭勒盟'],['106','阿拉善盟']];
nc_a[6]=[['107','沈阳市'],['108','大连市'],['109','鞍山市'],['110','抚顺市'],['111','本溪市'],['112','丹东市'],['113','锦州市'],['114','营口市'],['115','阜新市'],['116','辽阳市'],['117','盘锦市'],['118','铁岭市'],['119','朝阳市'],['120','葫芦岛市']];
nc_a[7]=[['121','长春市'],['122','吉林市'],['123','四平市'],['124','辽源市'],['125','通化市'],['126','白山市'],['127','松原市'],['128','白城市'],['129','延边朝鲜族自治州']];
nc_a[8]=[['130','哈尔滨市'],['131','齐齐哈尔市'],['132','鸡西市'],['133','鹤岗市'],['134','双鸭山市'],['135','大庆市'],['136','伊春市'],['137','佳木斯市'],['138','七台河市'],['139','牡丹江市'],['140','黑河市'],['141','绥化市'],['142','大兴安岭地区']];
nc_a[9]=[['39','上海市']];
..........

 

转载于:https://www.cnblogs.com/fyy-888/p/5314764.html

<form action="xxx.jsp" method="post" > <table width="500"> <style> body { display: grid; place-content: center; min-height: 100vh; margin: 20px; font-family: 'Microsoft YaHei', sans-serif; font-size: 16px; } table { border-spacing: 10px; } </style> <tr> <td><b style="font-size: 16px;">性别</b></td> <td> <input type="radio" id="man" name="sex"/> <label for="man"><img src="images/man.jpg"> 男 </label> <input type="radio" id="women" name="sex"/> <label for="women"><img src="images/women.jpg"> 女 </label> </td> </tr> <tr> <td><b>生日</b></td> <td> <select name="year"> <option selected="selected">--请选择年--</option> <option>1990</option> <option>2000</option> <option>2010</option> </select> <select name="month"> <option selected="selected">--请选择月--</option> <option>1</option> <option>2</option> <option>3</option> </select> <select name="day"> <option selected="selected">--请选择日--</option> <option>11</option> <option>12</option> <option>13</option> </select> </td> </tr> <tr> <td><b>所在地区</b></td> <td> <input type="text" value="安徽" name="area"> </td> </tr> <tr> <td><b>婚姻状况</b></td> <td> <input type="radio" name="marital_status" id="spinsterhood"> <label for="spinsterhood"> 未婚 </label> <input type="radio" name="marital_status" id="married"> <label for="married"> 已婚 </label> <input type="radio" name="marital_status" id="divorce"> <label for="divorce"> 离婚 </label> <input type="radio" name="marital_status" id="secret"> <label for="secret">保密</label> </td> </tr> <tr> <td><b>学历</b></td> <td><input type="text" name="edu_bg"></td> </tr> <tr> <td><b>喜欢的类型</b></td> <td> <input type="checkbox" name="like_type" id="wumei"> <label for="wumei"> 妩媚的 </label> <input type="checkbox" name="like_type" id="keai"> <label for="keai"> 可爱的 </label> <input type="checkbox" name="like_type" id="xiaoxianrou"> <label for="xiaoxianrou"> 小鲜肉 </label> <input type="checkbox" name="like_type" id="laolarou"> <label for="laolarou"> 老腊肉 </label> <input type="checkbox" name="like_type" id="douxihuan"> <label for="douxihuan"> 都喜欢 </label> </td> </tr> <tr> <td><b>自我介绍</b></td> <td> <textarea cols="30" rows="10" name="self_introduction"></textarea> </td> </tr> <tr> <td colspan="2" style="text-align: center;"> <input type="submit" value=" 免费注册 "> </td> </tr> </table> </fieldset> </form>
04-01
我的是vue2项目。其中我想将 <vxe-table style="margin-top: 8px;min-height: 900px;" :scroll-x="{ enabled: true }" :tooltip-config="tooltipConfig" :auto-resize="true" width="100%" border resizable show-overflow ref="table" :data="tableData" size="small" :edit-config="{trigger: 'click', mode: 'row'}" :edit-rules="validRules"> <vxe-table-column type="seq" title="序号" width="60"></vxe-table-column> <vxe-column field="FORMATTRCONFIG_FORMNAME" title="检验表单名称" width="200" :edit-render="{autofocus: '.vxe-input--inner'}"> <template #edit="{ row }"> <vxe-input v-model.trim="row.FORMATTRCONFIG_FORMNAME" type="text"></vxe-input> </template> </vxe-column> <vxe-column field="FORMATTRIBUTIONS_GROUPNAME" title="检验特性组名称" width="200" :edit-render="{autofocus: '.vxe-input--inner'}"> <template #edit="{ row }"> <vxe-input v-model.trim="row.FORMATTRIBUTIONS_GROUPNAME" type="text"></vxe-input> </template> </vxe-column> <vxe-column field="FORMATTRIBUTIONS_GROUPCODE" title="属性组Code" width="200" :edit-render="{autofocus: '.vxe-input--inner'}"> <template #edit="{ row }"> <vxe-input v-model.trim="row.FORMATTRIBUTIONS_GROUPCODE" type="text"></vxe-input> </template> </vxe-column> <vxe-column field="FORMATTRCONFIG_GROUPSORT" width="200" title="检验特性组顺序" :edit-render="{}"> <template #edit="{ row }"> <vxe-input v-model="row.FORMATTRCONFIG_GROUPSORT" type="number" placeholder="请输入检验特性组顺序"></vxe-input> </template> </vxe-column> <vxe-column field="FORMATTRCONFIG_NAME" title="检查项目名称" width="200" :edit-render="{autofocus: '.vxe-input--inner'}"> <template #edit="{ row }"> <vxe-input v-model.trim="row.FORMATTRCONFIG_NAME" type="text"></vxe-input> </template> </vxe-column> <vxe-column field="FORMATTRCONFIG_CODE" title="属性Code" width="200" :edit-render="{autofocus: '.vxe-input--inner'}"> <template #edit="{ row }"> <vxe-input v-model.trim="row.FORMATTRCONFIG_CODE" type="text"></vxe-input> </template> </vxe-column> <vxe-table-column field="FORMATTRCONFIG_POSITIONINDEXNAME" title="渲染位置" width="200" :edit-render="{ name: '$select', options: PositionOptions}"></vxe-table-column> <vxe-column field="FORMATTRCONFIG_SORT" width="200" title="检查顺序" :edit-render="{}"> <template #edit="{ row }"> <vxe-input v-model="row.FORMATTRCONFIG_SORT" type="number" placeholder="请输入检查顺序"></vxe-input> </template> </vxe-column> <vxe-table-column field="FORMATTRCONFIG_RENDERTYPENAME" title="记录类型" width="200" :edit-render="{ name: '$select', options: RecordOptions}"></vxe-table-column> <vxe-column field="FORMATTRCONFIG_SPANNUM" width="200" title="显示宽度占位" :edit-render="{}"> <template #edit="{ row }"> <vxe-input v-model="row.FORMATTRCONFIG_SPANNUM" type="number" placeholder="请输入显示宽度占位"></vxe-input> </template> </vxe-column> <vxe-column field="FORMATTRCONFIG_VALUECOUNT" width="200" title="填写值数量" :edit-render="{}"> <template #edit="{ row }"> <vxe-input v-model="row.FORMATTRCONFIG_VALUECOUNT" type="number" placeholder="请输入填写值数量"></vxe-input> </template> </vxe-column> <vxe-column field="StandardContent" width="200" title="标准内容" :edit-render="{}"> <template #edit="{ row }"> <!-- <vxe-input v-model.trim="row.StandardContent" type="textarea" placeholder="请输入标准内容"></vxe-input> --> <el-input type="textarea" autosize rows="2" v-model.trim="row.StandardContent"> </el-input> </template> </vxe-column> <vxe-column field="InspectMethod" width="200" title="检测方法/工具" :edit-render="{}"> <template #edit="{ row }"> <!-- <vxe-input v-model.trim="row.InspectMethod" type="text" placeholder="请输入检测方法/工具"></vxe-input> --> <el-input type="textarea" autosize rows="2" v-model.trim="row.InspectMethod"> </el-input> </template> </vxe-column> <vxe-column field="FORMATTRCONFIG_CHILDGROUPNAME" title="子表组名称" width="200" :edit-render="{autofocus: '.vxe-input--inner'}"> <template #edit="{ row }"> <vxe-input v-model.trim="row.FORMATTRCONFIG_CHILDGROUPNAME" type="text"></vxe-input> </template> </vxe-column> <vxe-column field="FORMATTRCONFIG_CHILDGROUPCODE" title="子表组Code" width="200" :edit-render="{autofocus: '.vxe-input--inner'}"> <template #edit="{ row }"> <vxe-input v-model.trim="row.FORMATTRCONFIG_CHILDGROUPCODE" type="text"></vxe-input> </template> </vxe-column> <vxe-table-column field="FORMATTRCONFIG_VALIDTYPE" title="输入验证规则" width="200" :edit-render="{ name: '$select', options: formattedvalidationType}"></vxe-table-column> <vxe-column field="FORMATTRCONFIG_UNIT" title="单位名称" width="200" :edit-render="{autofocus: '.vxe-input--inner'}"> <template #edit="{ row }"> <vxe-input v-model.trim="row.FORMATTRCONFIG_UNIT" type="text"></vxe-input> </template> </vxe-column> <vxe-table-column field="FORMATTRCONFIG_ISMUTIPLYNAME" title="是否多选" width="200" :edit-render="{ name: '$select', options: TypeOptions}"></vxe-table-column> <vxe-table-column field="FORMATTRCONFIG_ISREQUIREDNAME" title="是否必填" width="200" :edit-render="{ name: '$select', options: TypeOptions}"></vxe-table-column> <vxe-column field="FORMATTRCONFIG_DEFAULTVALUE" title="默认值" width="200" :edit-render="{autofocus: '.vxe-input--inner'}"> <template #edit="{ row }"> <vxe-input v-model.trim="row.FORMATTRCONFIG_DEFAULTVALUE" type="text"></vxe-input> </template> </vxe-column> <vxe-column field="FORMATTRCONFIG_STANDARDVALUE" title="标准值" width="200" :edit-render="{autofocus: '.vxe-input--inner'}"> <template #edit="{ row }"> <vxe-input v-model.trim="row.FORMATTRCONFIG_STANDARDVALUE" type="text"></vxe-input> </template> </vxe-column> <vxe-column field="FORMATTRCONFIG_UPPERLIMIT" width="200" title="标准上限" :edit-render="{}"> <template #edit="{ row }"> <vxe-input v-model="row.FORMATTRCONFIG_UPPERLIMIT" type="number" placeholder="请输入标准上限"></vxe-input> </template> </vxe-column> <vxe-column field="FORMATTRCONFIG_LOWERLIMIT" width="200" title="标准下限" :edit-render="{}"> <template #edit="{ row }"> <vxe-input v-model="row.FORMATTRCONFIG_LOWERLIMIT" type="number" placeholder="请输入标准下限"></vxe-input> </template> </vxe-column> <vxe-table-column field="FORMATTRCONFIG_ISCUSTOMRESULTNAME" title="是否人为录入检验结论" width="200" :edit-render="{ name: '$select', options: TypeOptions}"></vxe-table-column> <vxe-column field="FORMATTRCONFIG_CHILDRENPARAMS" title="关联子属性集合" width="200" :edit-render="{autofocus: '.vxe-input--inner'}"> <template #edit="{ row }"> <vxe-input v-model.trim="row.FORMATTRCONFIG_CHILDRENPARAMS" type="text"></vxe-input> </template> </vxe-column> <vxe-column field="FORMATTRCONFIG_PARENTSPARAMS" title="关联父属性集合" width="200" :edit-render="{autofocus: '.vxe-input--inner'}"> <template #edit="{ row }"> <vxe-input v-model.trim="row.FORMATTRCONFIG_PARENTSPARAMS" type="text"></vxe-input> </template> </vxe-column> <vxe-table-column field="FORMATTRCONFIG_SOURCETYPE" width="200" title="数据源方式" :edit-render="{ name: '$select', options: sourceOptions, }"></vxe-table-column> <vxe-column field="FORMATTRCONFIG_SOURCE" title="下拉选项" width="200" :edit-render="{autofocus: '.vxe-input--inner'}"> <template #edit="{ row }"> <vxe-input v-model.trim="row.FORMATTRCONFIG_SOURCE" type="text"></vxe-input> </template> </vxe-column> <vxe-column field="FORMATTRCONFIG_REQUESTURL" title="事后联动API URL" width="200" :edit-render="{autofocus: '.vxe-input--inner'}"> <template #edit="{ row }"> <vxe-input v-model.trim="row.FORMATTRCONFIG_REQUESTURL" type="text"></vxe-input> </template> </vxe-column> <vxe-table-column field="FORMATTRCONFIG_EVENTTYPE" title="事后接口类型" width="200" :edit-render="{ name: '$select', options: formattedAfterInterfaceTypeArr}"></vxe-table-column> <vxe-column field="FORMATTRCONFIG_CHILDERRORCOUNT" width="200" title="子表判定异常行数" :edit-render="{}"> <template #edit="{ row }"> <vxe-input v-model="row.FORMATTRCONFIG_CHILDERRORCOUNT" type="number" placeholder="请输入子表判定异常行数"></vxe-input> </template> </vxe-column> </vxe-table>上述代码转换为使用 <vxe-grid class="gridclass" ref="xGrid" v-bind="gridOptions"方式进行配置时渲染,比如: gridOptions: { resizable: true, border: true, stripe: true, rowConfig: { isHover: true, },...,editConfig: { trigger: 'click', mode: 'cell',...}, editRules: {...}, columns: [...]},注意我的columns支持部分列编辑,以及注意下拉数据源、必须输入验证等,结合实际情况给出优化完善后的完整代码
最新发布
09-03
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值