市委组织部项目--纠正下拉框多选的错误


http://blog.csdn.net/hejingyuan6/article/details/18812435


在上篇博客中曾介绍了一种方式实现下拉框多选,而且在编辑时,可以选中已选项。

出现的问题:当时使用的方式是,点击编辑时用id绑定,easyui会根据下拉框中的内容自动拆分,当时测试时,由于id均为各位数字,固没有问题,但是当随着数据库中的内容增加,id可能是两位或者三位数字,这时,easyui仍然会给我们拆分,本来id43,应根据43这个id号去查找,但是系统却会拆分成4,3。然后就会去查找id43对应的责任单位,但这些并不是我们想要的!

 

解决方案:

 

添加县市区定量考核指标:根据考核年份选择责任单位,责任单位可多选

 <div id="dlg" class="easyui-dialog" style="width: 400px;top:110px;left:329px; height: auto; padding: 10px 20px"
        closed="true" buttons="#dlg-buttons">
        <div class="ftitle">添加/编辑定量指标</div>
        <form id="fm" method="post" novalidate >
            <div class="fitem" >                           
                <label >指标名称:</label>
                <input  id="Name" name="Name" class="easyui-validatebox" required="true"/>
            </div>
            <div class="fitem">
                <label>考核年份:</label>              
                 <input class="easyui-combobox" id="year" runat="server" style="border-color:black"
                         name="year"
                         data-options="  
                         url:'SetCityQuantifyTarget.ashx?test=inquireServerTime',                             
                         method:'get',
                         editable:false,
                         valueField:'year',                           
                         textField:'year',
                         panelHeight: 'auto',                     
                         onSelect:function(rec){                                               
                         var url = 'SetCityQuantifyTarget.ashx?test=GetCity&name='+rec.year;
                         $('#ResponsibilityUnit').combobox('clear'),  
                         $('#ResponsibilityUnit').combobox('reload', url); 
                        }                             
                  " />              
            </div>
            <div class="fitem">
                <label>责任单位:</label>               
                <input class="easyui-combobox" id="ResponsibilityUnit" runat="server" Width="133px"  style="border-color:black"
                            name="ResponsibilityUnit"
                            data-options="                                                  
                                method:'get',
                                valueField:'id',
                                textField:'unitname',
                                editable:false,
                                multiple:true 
                                               
                        " />              
            </div>         
            <div class="fitem">
                <label>一类县权重:</label>
                <input  id="Type1" name="Type1" class="easyui-validatebox" required="true" />
            </div>
            
            <div id="Div1" class="fitem" runat="server">
                <label>二类县权重:</label>
               <input  id="Type2" name="Type2" class="easyui-validatebox" required="true" />

            </div>
            <div class="fitem">
                <label>广阳区权重:</label>
               <input  id="guangyang" name="guangyang" class="easyui-validatebox" required="true" />
            </div>
            <div class="fitem">
                <label>安次区权重:</label>
               <input  id="anci" name="anci" class="easyui-validatebox" required="true" />
            </div>

            
            <input type="hidden" id="test" name="test" />
            <input type="hidden" id="test1" name="test" />
        </form>
    </div>


编辑时:直接绑定字段名称,而不是id值,将选中行的责任单位字段直接赋给弹出框!$('#ResponsibilityUnit').combobox('setText',row.ResponsibilityUnit);

//编辑事件
      function editUser() {
          var type;
          type = $('#Type').combobox('getText');
          if (type != "全部") {
              var row = $('#dg').datagrid('getSelected');
              $('#fm').form('clear');
              if (row) {
                  //$.ajaxSetup({
                  //    async: false
                  //});
                  //var url = 'SetCityQuantifyTarget.ashx?test=GetCity&name=' + row.YearTime;
                  //$('#ResponsibilityUnit').combobox('reload', url);

                  $('#dlg').dialog('open').dialog('setTitle', '编辑县市区定量指标');
                  $('#TargetID').val(row.TargetID);
                  $('#Name').val(row.Name);
                  document.getElementById("year").value = row.YearTime;
                  //$('#Type3').val(row.Type3);
                  $('#guangyang').val(row.guangyang);
                  $('#anci').val(row.anci);
                  $('#Type2').val(row.Type2);
                  $('#Type1').val(row.Type1);
                  $('#year').combobox('setText', row.YearTime);
                  $('#ResponsibilityUnitID').val(row.ResponsibilityUnitID);
                  var resID = row.ResponsibilityUnit;
                  //$('#ResponsibilityUnit').combobox('setText', row.ResponsibilityUnit);
                  var str = new Array();
                  str = resID.split(";");   //分割数组成为一个个单一的个体,放在数组中
                  var totalData = $('#ResponsibilityUnit').combobox('getData');  //获取下拉框中的值
                  for (var i = 0; i < totalData.length; i++) {
                      for (var j = 0; j < str.length; j++) {
                          if (totalData[i].unitname == str[j]) {
                              $('#ResponsibilityUnit').combobox('select', totalData[i].id);  //循环判断,如果某项一致,则该项选中
                          }
                      }
                  }

                  document.getElementById("test").value = "modify"
                  $('#fm').form('load');                
              } else {
                  $.messager.alert('提示', '请选中一条记录进行修改', 'info');
                  return;
              }
          } else {
              $.messager.alert('提示', '请选中指标类型进行修改', 'info');
              return;
          }


      }

出现的问题:




原因:因为在添加责任单位时,是根据年份进行选择的,也就是当年份onSelect(当用户选择一个列表项的时候触发)时,加载责任单位信息,但是编辑时我可能不点击年份则不会触发onSelect事件,就会出现如上问题。

 

解决方法:首先想到的是,当编辑时再次根据年份加载一次责任单位即:

 var url ='SetCityQuantifyTarget.ashx?test=GetCity&name=' + row.YearTime;

 $('#ResponsibilityUnit').combobox('reload',url);

 

显示结果:




而且只有首次加载时,下拉框中显示为空,第二次的话就正常显示(也就是当刷新完,第一次点击为空,第二次点击即正常)


Why


也就是说,当下拉框加载上数据之后显示正常,那么不正常时,可能就是在编辑时重新查询下拉框的内容时,还没有查询到数据,固显示为空。

 

解决方案:让js先将下拉框的数据加载上,然后

                  var resID = row.ResponsibilityUnit;
                  //$('#ResponsibilityUnit').combobox('setText', row.ResponsibilityUnit);
                  var str = new Array();
                  str = resID.split(";");   //分割数组成为一个个单一的个体,放在数组中
                  var totalData = $('#ResponsibilityUnit').combobox('getData');  //获取下拉框中的值
                  for (var i = 0; i < totalData.length; i++) {
                      for (var j = 0; j < str.length; j++) {
                          if (totalData[i].unitname == str[j]) {
                              $('#ResponsibilityUnit').combobox('select', totalData[i].id);  //循环判断,如果某项一致,则该项选中
                          }
                      }
                  }

循环的将选中行中的责任单位和下拉框中的数据进行匹配,相等的被选中,显示出来。固为了上程序按步执行,添加如下代码即可!


//同步执行
                  $.ajaxSetup({
                      async: false
                  });


结果显示:





总结:问题源源不断,针对问题解决问题,不断提升自己!





  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 31
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值