经常使用easyui,对于基本的使用还算了解,经常有这样的需要,需要动态的修改required,也就是在某些情况下required是true,有些情况下required是false,之前使用的方法主要有两种:
一种是构造函数方法,重新构造一个
$("#" +id).combobox({required:false});
$("#" +id).combobox({required:true});
后来发现这种在一些很奇怪的情况下会出现一些很奇怪的现象,比如combobox已经加载数据,如果使用{}再初始化一遍,会重新发送url,再次加载数据
第二种就是复制属性,再重新构造
//取原组件属性
var _options = $("#" +id).combobox("options");
//设置必填
options.required = isRequired;
这样也是有问题的,因为combobox已经渲染完成,只是修改options的required属性,其关联依赖的对象的属性还是原本的属性,最直接的问题是,原本的required为true,那么在form表单的submit的时候会验证combobx的值;动态修改为false之后,form提交的时候还是会验证该下拉框,即主动设置options.required = isRequired;是不可以的
于是没有办法只能在网上找答案,但大部分都是人云亦云,没有经过大量测试。
后来终于在官网论坛上到找了相关回复
function iCheckChange(aChecked){
$('#iCombo').combobox(aChecked?'enable':'disable');//禁用或者启用
$('#iCombo').combobox('options').required = aChecked;//动态需改required属性
$('#iCombo').combobox('textbox').validatebox('options').required = aChecked;//修改关联对象属性
$('#iCombo').combobox('validate');//重新验证
};
经过测试是可用的
下拉框
$("#" +id).combobox('options').required = isRequired;
$("#" +id).combobox('textbox').validatebox('options').required = isRequired;
$("#" +id).combobox('validate');
日期
$("#" +id).datebox('options').required = isRequired;
$("#" +id).datebox('textbox').validatebox('options').required = isRequired;
$("#" +id).datebox('validate');
单行输入
$("#" +id).validatebox('options').required = isRequired;
$("#" +id).validatebox('validate');
时间输入
$("#" +id).timespinner('options').required = isRequired;
$("#" +id).timespinner().validatebox('options').required = isRequired;
$("#" +id).timespinner('validate');
数值输入
$("#" +id).numberbox('options').required = isRequired;
$("#" +id).numberbox().validatebox('options').required = isRequired;