使用js对form表单二级菜单联动效果实现

使用js对form表单二级菜单联动效果实现

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8" />
    <title>form表单之select操作</title>
<script type="text/javascript">
var arr_province = ["请选择省/城市","北京市","上海市","天津市","重庆市","深圳市","广东省","河南省"];
var arr_city = [
                ["请选择城市/地区"],
                ["东城区","西城区","朝阳区","宣武区","昌平区","大兴区","丰台区","海淀区"],
                ['宝山区','长宁区','丰贤区', '虹口区','黄浦区','青浦区','南汇区','徐汇区','卢湾区'],
                ['和平区', '河西区', '南开区', '河北区', '河东区', '红桥区', '塘古区', '开发区'],
                ['俞中区', '南岸区', '江北区', '沙坪坝区', '九龙坡区', '渝北区', '大渡口区', '北碚区'],
                ['福田区', '罗湖区', '盐田区', '宝安区', '龙岗区', '南山区', '深圳周边'],
                ['广州市','惠州市','汕头市','珠海市','佛山市','中山市','东莞市'],
                ['郑州市','洛阳市','安阳市','登封市','新密市','南阳市']
            ];
 
onload = function() {
    var oForm = document.getElementById('form1');//通过Id获取form标签元素
    var oProvince = oForm.children[0];//省份的下拉菜单标签对象赋值给oProvince
    var oCity = oForm.children[1];//城市的下拉菜单选项标签对象赋值给oCity
 
    // 添加点击onchange事件
    oProvince.onchange = function() {
		/*
		HTML DOM Select 对象
		selectedIndex	设置或返回下拉列表中被选项目的索引号。
		*/
        var _this = this.selectedIndex;//把被选中的选项的索引返回赋值给_this
        // 默认进来高度清零
        oCity.length = 0;
        // 指定城市下拉的高度
        initCity(_this);
    };
	// 城市下拉内容高;
	function initCity(index){
	    // 指定城市下拉的高度
	    oCity.length = arr_city[index].length;//把城市数组的长度---> 赋值给城市下拉菜单的长度
	    // 循环数组, 把内容写到下拉列表中去
		//把被选中的选项的索引当做参数传递进来
	    for( var i = 0; i < arr_city[index].length; i++ ){
	        oCity.options[i].text = arr_city[index][i];
	        oCity.options[i].value = arr_city[index][i];
	    }
	};
    // 初始化下拉列表
    init();
    // init select
    function init(){
        var index = 0;
        // 指定下拉的高度
        oProvince.length = arr_province.length;//把省份数组对象的长度赋值给省份下拉菜单对象
        // 循环数组, 把内容写到下拉列表中去
        for( var i = 0; i < arr_province.length; i++ ){
            oProvince.options[i].text = arr_province[i];
            oProvince.options[i].value = arr_province[i];
        }
        // 指定默认索引号
        oProvince.selectedIndex = index;
        // 指定城市下拉的高度
        initCity(index);
    }
};

</script>
</head>
 
<body>
<form id="form1">
    省份: <select name="province" style="width:130px;"></select>
 
    城市: <select name="city" style="width:130px;"></select>
</form>
</body>
</html>
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现Django中自定义的表单级联动,需要使用到`ModelForm`和JavaScript实现。 首先,我们需要创建一个ModelForm,用于实现表单的自定义字段和验证规则。 ```python from django import forms from .models import ModelA, ModelB class MyForm(forms.ModelForm): class Meta: model = ModelA fields = '__all__' # 可根据实际需求选择需要的字段 def __init__(self, *args, **kwargs): super(MyForm, self).__init__(*args, **kwargs) self.fields['second_model'] = forms.ModelChoiceField(queryset=ModelB.objects.none()) if 'first_model' in self.data: try: first_model_id = int(self.data.get('first_model')) self.fields['second_model'].queryset = ModelB.objects.filter(first_model_id=first_model_id) except (ValueError, TypeError): pass elif self.instance.pk: self.fields['second_model'].queryset = self.instance.first_model.modelb_set.order_by('name') ``` 在上面的例子中,`ModelA`是第一个模型,`ModelB`是第二个模型。在`MyForm`类的初始化方法中,根据`first_model`字段的值动态更新`second_model`字段的queryset,实现了多级联动。 接下来,我们需要在模板中添加HTMLJavaScript实现级联效果。 ```html <form method="POST" action=""> {% csrf_token %} {{ form.as_p }} <button type="submit">Submit</button> </form> <script src="https://code.jquery.com/jquery-3.5.1.min.js"></script> <script> $(document).ready(function() { $('#id_first_model').change(function() { var url = $(this).attr('data-href'); var first_model_id = $(this).val(); $.ajax({ url: url, data: { 'first_model_id': first_model_id }, success: function(data) { $('#id_second_model').html(data); } }); }); }); </script> ``` 在上面的例子中,我们使用了jQuery来监听`first_model`字段的变化事件。当`first_model`字段的值发生改变时,执行AJAX请求,获取到对应`second_model`字段的选项,并更新页面上的`second_model`字段。 总结来说,我们通过自定义的表单类`MyForm`来实现外键的多级联动,然后通过JavaScript的AJAX请求和动态更新页面的选项来实现表单的多级联效果

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值