JQuery easyUi datagrid 中 editor 动态设置最大值最小值

前言

近来项目中使用到 easyui 来进行页面设计,感觉挺方便的,但是网上除了api外,其他有价值的资料比较少,故在此分享一点经验,供大家参考。

问题

JQuery easyUi datagrid 可编辑行的editor属性具有 min 和 max 属性,设置可以输入的最大值和最小值,但是这个是固定的,如下:

[html] view plain copy

  1. {field:‘workRate‘,title:‘<%/*填报*/%><bean:message key="task.workloadnew.addreport.jsp.message005"/><br><%/*完成率*/%><bean:message key="task.workloadnew.addreport.jsp.message006"/>‘,align:‘center‘,width:50,
  2. formatter:function(value, rowData, rowIndex){
  3. if(value && value!=0)
  4. {
  5. return value + ‘%‘;
  6. }
  7. else
  8. {
  9. return "";
  10. }
  11. },
  12. editor:{
  13. type:‘numberspinner‘,
  14. options: {
  15. increment:10,
  16. min:0,
  17. max:100
  18. }
  19. }
  20. }

min:0,max:100 限定了每次该输入框只能输入的范围是 0 - 100,而我每条记录的输入的范围是根据这条记录来定的,也就是说每次都要重新指定。但是,

苦于editor:{...} 中不带自定义函数。故需要在其他内置函数中想办法。

解决办法

a. 在激活编辑状态时触发编辑器重置最大值和最小值

此方法的主要原理是激活编辑状态后,得到编辑器的jquery 对象,设置编辑器的范围,如:

[html] view plain copy

  1. var editors = $(‘#workloadTable‘).datagrid(‘getEditors‘, rowIndex);
  2. var workRateEditor = editors[0]; // 百分比编辑框
  3. workRateEditor.target.numberspinner({min:rowData.minRate,max:rowData.maxRate})

rowData.minRate 和 rowData.maxRate 是每条记录的填报范围。

这个是编辑器激活时进行重置的,但是这个触发有缺点就是,编辑器的初始化已经完成了,而这里会重新初始化,相对于新建了一个编辑器对象,编辑器的宽度会自动调整,这时我们要调整宽度:

[html] view plain copy

  1. workRateEditor.target.css("width","50");

但是还是会有其他问题,比如说每次重写触发的时候,会覆盖原来设置的值,这个操作性就下降了不少。。。也可以进行特殊处理。

b. 在激活编辑器状态前设置

[javascript] view plain copy

  1. onBeforeEdit:function(rowIndex, rowData)
  2. {
  3. //任务完成100%, 并且已审核通过,不能编辑
  4. if(rowData && rowData.status && (rowData.status==‘TASK_ASSIGNER_AUDITED‘ || rowData.status==‘TASK_MONITOR_AUDITED‘) && rowData.finishRate == 100)
  5. {
  6. return false;
  7. }
  8. // 重要! 重新设置百分比填报范围
  9. var columnOption = $(‘#workloadTable‘).datagrid(‘getColumnOption‘,"workRate");
  10. columnOption.editor.options.min = rowData.minRate;
  11. columnOption.editor.options.max = rowData.maxRate;
  12. // 解决单击一行会自动设置最小值的问题
  13. if(rowData.workRate == 0)
  14. {
  15. rowData.workRate = "";
  16. }
  17. }

这样就可以每次输入前都已经设置好了输入范围,所以编辑器激活后已经完成初始化,所以编辑器的大小不会变化。故推荐使用这种方法。

时间: 2024-12-26 09:32:31

JQuery easyUi datagrid 中 editor 动态设置最大值最小值的相关文章

jquery easyui datagrid 无滚动条,datagrid 没垂直滚动条

jquery easyui datagrid 无滚动条,datagrid 没垂直滚动条 ============================== 蕃薯耀 2018年2月6日 http://www.cnblogs.com/fanshuyao/ 一.问题描述: 当jquery easyui datagrid中数据量大时,body页面又设置高度超出隐藏时(如:overflow-y:hidden)时,这时datagrid加载满整个页面时也无滚动条. 二.解决方案: 给datagrid绑定onLoad

jQuery EasyUI DataGrid API 中文文档

扩展自$.fn.panel.defaults,用 $.fn.datagrid.defaults重写了 defaults . 依赖 panel resizable linkbutton pagination 用法 1.  <table id="tt"></table> 1.  $('#tt').datagrid({ 2.      url:'datagrid_data.json', 3.      columns:[[ 4.          {field:'co

jquery easyui datagrid设置行样式 不可删除某行

rowStyler: function (index,row) { if (parseInt(row.ksrs) > 0) { return 'color:red'; } }, onLoadSuccess:function(data){ var rows = data.rows; for (var j = 0; j < rows.length; j++) { if (parseInt(rows[j]["ksrs"]) > 0) { $(".datagrid-

JQuery EasyUI DataGrid动态合并单元格

/**        * EasyUI DataGrid根据字段动态合并单元格        * @param fldList 要合并table的id        * @param fldList 要合并的列,用逗号分隔(例如:"name,department,office");        */        function MergeCells(tableID, fldList) {            var Arr = fldList.split(",&quo

jquery easyui datagrid动态改变title的值

title:'<input type="text" id="txtTitle1" style="background:none;border:none;"/>', onLoadSuccess:function(data) { $("#txtTitle1").val("所有教师 人数:"+$("#IndeterminateMembers").datagrid("get

Jquery easyui datagrid 导出Excel

datagrid的扩展方法,用于将当前的数据生成excel需要的内容. 1 <script> 2 /** 3 Jquery easyui datagrid js导出excel 4 修改自extgrid导出excel 5 * allows for downloading of grid data (store) directly into excel 6 * Method: extracts data of gridPanel store, uses columnModel to constru

[JS][easyui]jQuery EasyUI Datagrid VirtualScrollView视图简单分析

 大家都知道EasyUI的Datagrid组件在加载大数据量时的优势并不是很明显,相对于其他一些框架,如果数据量达到几千,便会比较慢,特别是在IE下面.针对这种情况,我们首要做的是要相办法优化datagrid组件的各方面性能,不过任何事情都是可以变通解决的,virtualScrollView就是一种不错的解决方案. virtualScrollView的准则就是尽量少画tr到table里,表格的高度是有限的,而用户的可见区域是很有限的,所以数据量很大的时候,是没有必要将所有数据数据都画到表格中

Jquery Easyui框架中常用的验证

对于validatebox空间,验证其输入字符长度的最大值是否超出数据库中设置的字段长度.方法如下: 1 /** 2 * 验证输入字符长度 3 */ 4 $.extend($.fn.validatebox.defaults.rules, { 5 maxLength: { 6 validator: function(value, param){ 7 if(value.length >= param[0]) { 8 // showMsg("输入信息长度不能超过"+ param[0]

jQuery EasyUI Datagrid性能优化专题

jQuery EasyUI的Datagrid组件功能算是很强大了,不过性能确实不怎么乐观,而对于性能问题,网络上几乎也找不到相关的优化资料,所谓的牛人们可能 都望而却步了.本博客以后会带着分析Datagrid组件的性能问题,并且给出优化方案,也希望大家能集思广益,给出一些好的想法. 慢在哪些方面 以目前对Datagrid的了解程度去看待性能问题,主要有以下几点: 加载大数据量时比较慢(不考虑服务端返回数据的时间),这点尤其体现在IE浏览器里面: 大数据量时,加载后,操作很不流畅,勾选慢,sing