Easyui编辑行的时候,其中一列为多选,大神们帮帮忙,小妹是菜鸟 easyuicombobox 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 data-options="multiple:true,multiline:true" 这是那一列的代码:{title:'完成进度',field:'finishProgress',width:60, formatter:function(value){ var s =""; for (var i = 0; i < progressData.length; i++) { if (progressData[i].label == value) { s += progressData[i].value+","; } } return s; /*var s="未开始"; if(value==0){ s="未开始"; }else if(value == 1){ s="执行中"; }else if(value == 2){ s='<span style="color:red">未完成</span>'; }else if(value == 3){ s='<span style="color:green">已完成</span>'; } return s; */ }, editor: { type: 'combobox', options: { required: true, editable:false,//不可输入文本 multiple:true,//支持多选 valueField: 'label', textField: 'value', data: progressData } } }, 你的负责人不是已经实现了多选功能啊看看你html代码 刚刚贴的是js的 用datagrid直接输出的 没有HTML代码 不知道我这个解释合不合理 我的负责人那里从数据库拿到之后处理了,返回的json数据就是那个样子的 其实我就是要在负责人那里做多选,然后现在拿完成进度那里做实验, if (progressData[i].label == value) { s += progressData[i].value+","; }将if注释掉 看看 onAfterEdit: function (rowIndex, rowData, changes) { //endEdit该方法触发此事件 alert(rowData.finishProgress); console.info(rowData); editRow = undefined; },保存的时候,通过这个输出查看,发现alert(rowData.finishProgress);只输出了一个排在前面被选择的值 progressData 打印出来看看贴上完整 代码看看 整个datagrid的代码 按你说的用combotree可以,但是好像要写扩展方法,我写成这样//combotree的扩展方法 jQuery.extend(jQuery.fn.datagrid.defaults.editors, { combotree: { init: function(container, options){ var editor = jQuery('<input type="text">').appendTo(container); editor.combotree(options); return editor; }, destroy: function(target){ jQuery(target).combotree('destroy'); }, getValue: function(target){ var temp = jQuery(target).combotree('getValues'); alert(temp); return temp.join(','); }, setValue: function(target, value){ alert(value);//这里报错,说value undifinde var temp = value.split(','); alert(temp); jQuery(target).combotree('setValues', temp); }, resize: function(target, width){ jQuery(target).combotree('resize', width); } } });我想问一下那个value是什么数据? 好像原因是没写扩展方法,写了扩展方法之后那个value那里说没找到 是什么原因呢 好像原因是没写扩展方法,写了扩展方法之后那个value那里说没找到 是什么原因呢不是不用写扩展方法也能实现多选,你看看progressData是些什么数据?是否完整? 好像原因是没写扩展方法,写了扩展方法之后那个value那里说没找到 是什么原因呢不是不用写扩展方法也能实现多选,你看看progressData是些什么数据?是否完整?其实我是要做负责人那里的多选,这里是负责人那行的代码:{title:'负责人',field:'teamgroup',width:150, formatter:function(value,data,rec){ var result = ""; if(value!=null && value.length>0){ for(var i=0; i<value.length;i++){ for(var j=0; j<consultData.length;j++){ if(value[i]==consultData[j].value){ result += consultData[j].text + ","; } } } result = result.substring(0,result.lastIndexOf(",")); } return result; }, editor: { type: 'combotree', options: { required: true, multiple:true,//支持多选 /*multiline:true,*/ /*url:root + '/worksplan/Workplan/ajaxQueryWorkplanRecord.do',*/ valueField: 'value', textField: 'text', data: consultData } } },然后这是我的consultData数据:var consultData = [{value:'8afe888629b0d1050129b0dc060c0003',text:'王艳红'}, {value:'E9A36C7F59804B629208178FFF575890',text:'谭小花'}, {value:'282889aa2fddd008012fddd1b3c40002',text:'张亮'}]; 用combotree是可以的,选择负责人,多选的时候但是点击保存之后,传过去的数据可以看见负责人那里没有id 你先将 formatter:function(value,data,rec){} 去掉,看看页面是否显示了多选数据。 看看http://www.jeasyui.com/demo/main/index.php?plugin=ComboBox&theme=default&dir=ltr&pitem=combotree有个文件夹图标 ,不太好看。 亲 现在这个不是关键 关键的是 我用combobox多选之后 点击保存的时候,获取不到多选的值 显示多选数据,跟我刚刚发的图片那种情况一样的,一点保存就没了那要看看你的保存的方法是怎么写的保存的时候直接获取那一行啊,我原来已经后台添加好的负责人,如果不改变,只编辑其他的值,比如时限要求那些,就能正常修改,正常获取到负责人,但是只要修改负责人,点击保存就是获取不到负责人的ID{ text: '保存', iconCls: 'icon-save', handler: function () { //保存时结束当前编辑的行,自动触发onAfterEdit事件如果要与后台交互可将数据通过Ajax提交后台 datagrid.datagrid("endEdit", editRow); if (datagrid.datagrid('getChanges').length) { var updated = datagrid.datagrid('getChanges',"updated"); var inserted = datagrid.datagrid('getChanges',"inserted"); var deleted = datagrid.datagrid('getChanges', "deleted"); var effectRow = new Object(); if (inserted.length) { effectRow["inserted"] = JSON.stringify(inserted); } if (deleted.length) { effectRow["deleted"] = JSON.stringify(deleted); } if (updated.length) { effectRow["updated"] = JSON.stringify(updated); } alert(effectRow); var loadurl = root + '/worksplan/Workplan/saveProject.do?workTypeID='+workTypeID; $.post(loadurl, effectRow, function(rsp) { $.messager.alert("提示", "提交成功!"); datagrid.datagrid('acceptChanges'); }, "JSON").error(function() { $.messager.alert("提示", "提交错误了!"); }); } } } datagrid.datagrid('acceptChanges');放到最上面 试试 有个BUG http://cache.baiducontent.com/c?m=9f65cb4a8c8507ed4fece763105392230e54f73b6b84915e388fc21484642c101a39fef97a635619d7c26b6776f50f03b4e4732f77552fe0c889c30d86ac925979db6167255cdd1705d368fe9619759c70cd10feaf68f0caf425e4acc5a5dc4320c9&p=9e759a46d0c018eb0dbe9b7c4d5985&newp=8b2a971bc78711a05beb9739155785231610db2151d1d51221c5d7&user=baidu&fm=sc&query=easyui+datagrid+combobox+%B6%E0%D1%A1&qid=9afdb19d00005ac9&p1=1 我按他的方法加了扩展函数(请问扩展函数加在任意位置就可以吗?),但是报错说value is undifinde$.extend($.fn.datagrid.defaults.editors.combobox, { getValue : function(jq) { var opts = $(jq).combobox('options'); if(opts.multiple){ var values = $(jq).combobox('getValues'); if(values.length>0){ if(values[0]==''||values[0]==' '){ return values.join(',').substring(1);//新增的时候会把空白当成一个值了,去掉 } } return values.join(','); } else return $(jq).combobox("getValue"); }, setValue : function(jq, value) { var opts = $(jq).combobox('options'); if(opts.multiple&&value.indexOf(opts.separator)!=-1){//这里的value没找到 报错 var values = value.split(opts.separator); $(jq).combobox("setValues", values); } else $(jq).combobox("setValue", value); } }); value是数组,下面的方法可以在页面加载完成后填入数据$('#ID').combotree('loadData',JSON); 我按他的方法加了扩展函数(请问扩展函数加在任意位置就可以吗?),但是报错说value is undifinde$.extend($.fn.datagrid.defaults.editors.combobox, { getValue : function(jq) { var opts = $(jq).combobox('options'); if(opts.multiple){ var values = $(jq).combobox('getValues'); if(values.length>0){ if(values[0]==''||values[0]==' '){ return values.join(',').substring(1);//新增的时候会把空白当成一个值了,去掉 } } return values.join(','); } else return $(jq).combobox("getValue"); }, setValue : function(jq, value) { var opts = $(jq).combobox('options'); if(opts.multiple&&value.indexOf(opts.separator)!=-1){//这里的value没找到 报错 var values = value.split(opts.separator); $(jq).combobox("setValues", values); } else $(jq).combobox("setValue", value); } });这个是多选了 但是只能保存一个值的问题。你现在能获取到了值,而不是空或者undefined? 你要是喜欢EasyUI的话, 给你推荐几个比较好的网址, 里面有很多扩展内容http://sshe.jeasyuicn.com/http://jqext.sinaapp.com/ 求一段页面刷新小代码 折叠和展开~ extjs 的window modal在谷歌浏览器下有时遮罩无效的问题 求助`简单修改一段JS..能在FF火狐下运行.. C#如何获取"WScript.Shell"传递进去的参数? 文本框不清空问题!跟ifream有关? 帮帮忙,浪费我好几天时间 有没有有关JAVASCRIPT 好书下载的地方? 关于《IE6.0打印机制解析》的问题,高手请进!200分 如何在一个事件触发时,执行一个函数?? 求牛人解密一段javascript代码,多谢 如何实现多个div下li标签,一次点击显示6个,各个div不冲突
{title:'完成进度',field:'finishProgress',width:60,
formatter:function(value){
var s ="";
for (var i = 0; i < progressData.length; i++) {
if (progressData[i].label == value) {
s += progressData[i].value+",";
}
}
return s;
/*var s="未开始";
if(value==0){
s="未开始";
}else if(value == 1){
s="执行中";
}else if(value == 2){
s='<span style="color:red">未完成</span>';
}else if(value == 3){
s='<span style="color:green">已完成</span>';
}
return s; */
},
editor: {
type: 'combobox',
options: {
required: true,
editable:false,//不可输入文本
multiple:true,//支持多选
valueField: 'label',
textField: 'value',
data: progressData
}
}
},
看看你html代码
s += progressData[i].value+",";
}
将if注释掉 看看
//endEdit该方法触发此事件
alert(rowData.finishProgress);
console.info(rowData);
editRow = undefined;
},
保存的时候,通过这个输出查看,发现alert(rowData.finishProgress);只输出了一个排在前面被选择的值
我写成这样
//combotree的扩展方法
jQuery.extend(jQuery.fn.datagrid.defaults.editors, {
combotree: {
init: function(container, options){
var editor = jQuery('<input type="text">').appendTo(container);
editor.combotree(options);
return editor;
},
destroy: function(target){
jQuery(target).combotree('destroy');
},
getValue: function(target){
var temp = jQuery(target).combotree('getValues');
alert(temp);
return temp.join(',');
},
setValue: function(target, value){
alert(value);//这里报错,说value undifinde
var temp = value.split(',');
alert(temp);
jQuery(target).combotree('setValues', temp);
},
resize: function(target, width){
jQuery(target).combotree('resize', width);
}
}
});
我想问一下那个value是什么数据?
好像原因是没写扩展方法,写了扩展方法之后那个value那里说没找到 是什么原因呢
好像原因是没写扩展方法,写了扩展方法之后那个value那里说没找到 是什么原因呢
不是
不用写扩展方法也能实现多选,你看看progressData是些什么数据?是否完整?
好像原因是没写扩展方法,写了扩展方法之后那个value那里说没找到 是什么原因呢
不是
不用写扩展方法也能实现多选,你看看progressData是些什么数据?是否完整?其实我是要做负责人那里的多选,这里是负责人那行的代码:
{title:'负责人',field:'teamgroup',width:150,
formatter:function(value,data,rec){
var result = "";
if(value!=null && value.length>0){
for(var i=0; i<value.length;i++){
for(var j=0; j<consultData.length;j++){
if(value[i]==consultData[j].value){
result += consultData[j].text + ",";
}
}
}
result = result.substring(0,result.lastIndexOf(","));
}
return result;
},
editor:
{
type: 'combotree',
options: {
required: true,
multiple:true,//支持多选
/*multiline:true,*/
/*url:root + '/worksplan/Workplan/ajaxQueryWorkplanRecord.do',*/
valueField: 'value',
textField: 'text',
data: consultData
}
}
},
然后这是我的consultData数据:
var consultData = [{value:'8afe888629b0d1050129b0dc060c0003',text:'王艳红'},
{value:'E9A36C7F59804B629208178FFF575890',text:'谭小花'},
{value:'282889aa2fddd008012fddd1b3c40002',text:'张亮'}];
http://www.jeasyui.com/demo/main/index.php?plugin=ComboBox&theme=default&dir=ltr&pitem=
combotree有个文件夹图标 ,不太好看。
显示多选数据,跟我刚刚发的图片那种情况一样的,一点保存就没了那要看看你的保存的方法是怎么写的保存的时候直接获取那一行啊,我原来已经后台添加好的负责人,如果不改变,只编辑其他的值,比如时限要求那些,就能正常修改,正常获取到负责人,但是只要修改负责人,点击保存就是获取不到负责人的ID{ text: '保存', iconCls: 'icon-save', handler: function () {
//保存时结束当前编辑的行,自动触发onAfterEdit事件如果要与后台交互可将数据通过Ajax提交后台
datagrid.datagrid("endEdit", editRow);
if (datagrid.datagrid('getChanges').length) {
var updated = datagrid.datagrid('getChanges',"updated");
var inserted = datagrid.datagrid('getChanges',"inserted");
var deleted = datagrid.datagrid('getChanges', "deleted");
var effectRow = new Object();
if (inserted.length) {
effectRow["inserted"] = JSON.stringify(inserted);
}
if (deleted.length) {
effectRow["deleted"] = JSON.stringify(deleted);
}
if (updated.length) {
effectRow["updated"] = JSON.stringify(updated);
}
alert(effectRow);
var loadurl = root + '/worksplan/Workplan/saveProject.do?workTypeID='+workTypeID;
$.post(loadurl, effectRow, function(rsp) {
$.messager.alert("提示", "提交成功!");
datagrid.datagrid('acceptChanges');
}, "JSON").error(function() {
$.messager.alert("提示", "提交错误了!");
});
}
}
}
http://cache.baiducontent.com/c?m=9f65cb4a8c8507ed4fece763105392230e54f73b6b84915e388fc21484642c101a39fef97a635619d7c26b6776f50f03b4e4732f77552fe0c889c30d86ac925979db6167255cdd1705d368fe9619759c70cd10feaf68f0caf425e4acc5a5dc4320c9&p=9e759a46d0c018eb0dbe9b7c4d5985&newp=8b2a971bc78711a05beb9739155785231610db2151d1d51221c5d7&user=baidu&fm=sc&query=easyui+datagrid+combobox+%B6%E0%D1%A1&qid=9afdb19d00005ac9&p1=1
我按他的方法加了扩展函数(请问扩展函数加在任意位置就可以吗?),但是报错说value is undifinde
$.extend($.fn.datagrid.defaults.editors.combobox, {
getValue : function(jq) {
var opts = $(jq).combobox('options');
if(opts.multiple){
var values = $(jq).combobox('getValues');
if(values.length>0){
if(values[0]==''||values[0]==' '){
return values.join(',').substring(1);//新增的时候会把空白当成一个值了,去掉
}
}
return values.join(',');
}
else
return $(jq).combobox("getValue");
},
setValue : function(jq, value) {
var opts = $(jq).combobox('options');
if(opts.multiple&&value.indexOf(opts.separator)!=-1){//这里的value没找到 报错
var values = value.split(opts.separator);
$(jq).combobox("setValues", values);
}
else
$(jq).combobox("setValue", value);
}
});
我按他的方法加了扩展函数(请问扩展函数加在任意位置就可以吗?),但是报错说value is undifinde
$.extend($.fn.datagrid.defaults.editors.combobox, {
getValue : function(jq) {
var opts = $(jq).combobox('options');
if(opts.multiple){
var values = $(jq).combobox('getValues');
if(values.length>0){
if(values[0]==''||values[0]==' '){
return values.join(',').substring(1);//新增的时候会把空白当成一个值了,去掉
}
}
return values.join(',');
}
else
return $(jq).combobox("getValue");
},
setValue : function(jq, value) {
var opts = $(jq).combobox('options');
if(opts.multiple&&value.indexOf(opts.separator)!=-1){//这里的value没找到 报错
var values = value.split(opts.separator);
$(jq).combobox("setValues", values);
}
else
$(jq).combobox("setValue", value);
}
});
这个是多选了 但是只能保存一个值的问题。
你现在能获取到了值,而不是空或者undefined?