下拉选必填不为空html代码,easyui-combogrid必填为空时无法通过表单验证的问题

本文解决EasyUI Combogrid组件在设置必填验证时遇到的问题,通过手动赋值给隐藏文本框实现正确验证。

在使用easyui-combogrid时,由于html解析出的格式是如下三层:

注意到最外层的display:none,所以直接在样式中添加required="required"是不起作用的娥,而真正提交的input却是hidden。

第一层是一个display:none的下拉数据表格框;

第二层是一个validate-box,验证框;

第三层是一个显示属性为hidden,隐藏的文本框。

选择一项下拉值后发现,第一层的value,值为空,第三层的文本框值却不为空。那么问题就出现在第一层,因为它自动解析了一个display:none,同时我又在页面添加了必填属性,required:true,但是它又没有拿到值,所以就是那个报错的原因:一个隐藏的必填项为空。

前台html代码是自动解析的,无法更改,也就意味着无法去掉display:none属性,那么只能去掉必填属性,required:true.但是需求中又明确要求必填,那么只能在js中试试,是否能够识别必填属性:

/*********下拉数据表格*******/

$('#tx').combogrid({

panelWidth: 700,

panelHeight:500,

idField: 'value',

textField: 'value',

url:'getTx.do',

method: 'post',

fit: false,

fitColumns: false,

required: true,

editable:false,

columns: [[

{field:'value',title:'value'},

{field:'note',title:'note',align:'left'}

]],

onLoadSuccess:function(){ //修改页加载表格数据

$('#tx').combogrid('setValue', '${dto.tx}');

}

}

});

测试发现,无论是否有值,都会提示必填。这说明必填属性起作用了,但是这个框没有拿到值。那么此时的隐藏项就只剩下最后一层了,那个type=”hidden”的文本框,这样问题就简单多了,在下拉框选中值之后,将下拉框的值手动赋给这个文本框:

/*********下拉数据表格*******/

$('#tx').combogrid({

panelWidth: 700,

panelHeight:500,

idField: 'value',

textField: 'value',

url:'getTx.do',

method: 'post',

fit: false,

fitColumns: false,

required: true,

editable:false,

columns: [[

{field:'value',title:'value'},

{field:'note',title:'note',align:'left'}

]],

onLoadSuccess:function(){ //修改页加载表格数据

$('#tx').combogrid('setValue', '${dto.tx}');

},

onClickRow:function(index,row){

$('#tx').val(row.value); //下拉数据表格的第一层的input框赋值,否则不能作为必填项提交

}

}

});

注意到此处的方法onClickRow:function(index,row)是数据表格的方法,那么easyui-combogrid继承自easyui-datagrid和easyui-combo,它同时也继承了datagrid和combo的方法,所以此处可以直接用。

easyui-combobox中设置必填项,有以下几种方法: ### 方法一:直接在HTML代码中设置 在前台HTML代码里,通过`required="true"`属性来设置下拉框为必填项。示例如下: ```html <select id="compere_id" name="compere_id" class="easyui-combobox" style="width:80%" required="true" validType="selectValueRequired['#compere_id']" data-options="editable:false,panelHeight:'auto'"> <option value="">请择人员</option> <!-- 假设这里有循环生成的--> </select> ``` 这种方式在页面加载就会将该下拉框设置为必填项[^5]。 ### 方法二:使用JavaScript动态设置 可以使用JavaScript代码动态地设置easyui-combobox是否为必填项。 - **设置为必填项**: ```javascript $('#id').combobox({ required: true }); ``` - **设置为非必填项**: ```javascript $('#id').combobox({ required: false }); ``` 这里的`id`是easyui-combobox的ID。例如要设置ID为`myCombobox`的下拉框为必填项,代码如下: ```javascript $('#myCombobox').combobox({ required: true }); ``` 这种方式适合根据不同的业务逻辑动态改变下拉框的必填状态[^1]。 ### 方法三:结合条件判断动态设置 可以结合条件判断来动态设置必填项。例如,根据另一个下拉框的值来决定当前下拉框是否为必填项: ```html <select id="panelStyle" class="easyui-combobox"> <option value="6X1">6X1</option> <option value="other">其他</option> </select> <input class="easyui-validatebox" type="text" id='packageName' name='packageName' data-options="required:false,validType:['maxLength[90]']" style="width:150px" /> <script> function showpap() { var panelStyle = $("#panelStyle").combobox('getValue'); if ("6X1" == panelStyle) { $("#packageName").validatebox({ required: true }); // 增加必填项校验 } else { $("#packageName").validatebox({ required: false }); // 删除必填项校验 } } </script> ``` 在这个例子中,当`#panelStyle`下拉框的值为`6X1`,`#packageName`输入框会增加必填项校验;否则,会删除必填项校验。虽然这里是针对`validatebox`的示例,但对于`combobox`同样可以采用类似的逻辑来动态设置必填项[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值