问题
easyui的时间控件easyui-datebox有required属性可以设置必填或可空,当我们需要动态设置required时,我们会像这样设置:
$('#id').datebox({required:true});
这样设置可以达到必填的效果,但是当的datebox有值时,这个方法会初始化datebox,导致框内值丢失。
查询了官网文档,datebox没有相应方法提供。
解决办法
由于没有直接的api进行设置,我们可以直接设置datebox的option,使用一下api
于是我们这样写:
$(‘#id’).datebox('options').required = true;
这个时候我们只设置了当前浅表属性,文档中有一句
说明combo的方法也适用于datebox,而且方法依赖于textbox和validatebox。这时我们需要在datebox的validate里设置其约束option,才能成功设置,代码如下:
$('#id').datebox('textbox').validatebox('options').required = true;
这时虽然已经设置了required属性,但我们还需动态调用其验证,代码如下:
$('#id').datebox('validate');
这样可以成功动态设置required。最终所有代码是:
$('#id').datebox('options').required = true;
$('#id').datebox('textbox').validatebox('options').required = true;
$('#id').datebox('validate');
总结
所有easyui的input中最后约束都会是validatebox。其他的input设置都可参考此方法。
以下是其他input修改reuqired:
- combobox
$('#id').combobox('options').required = true;
$('#id').combobox('textbox').validatebox('options').required = true;
$('#id').combobox('validate');
- validatebox
$('#id').validatebox('options').required = true;
$('#id').validatebox('validate');
- timespinner
$('#id').timespinner('options').required = true;
$('#id').timespinner('textbox').validatebox('options').required = true;
$('#id').timespinner('validate');
- numberbox
$('#id').numberbox('options').required = true;
$('#id').numberbox('textbox').validatebox('options').required = true;
$('#id').numberbox('validate');
等等…