Datagrid的行内编辑,Combobox的级联。

本文介绍了一种基于Ajax技术实现实时省市联动下拉框的方法。当用户选择省份时,通过Ajax请求从服务器获取对应的数据,并更新市区下拉框的内容。文章提供了具体的JavaScript代码示例,展示了如何设置combobox组件及其事件监听。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

选择一个省份,市区的信息会发生相应的变化。主要是第一个combobox的值发生变化的时候,访问服务器,获得数据并赋值给第二个combobox,获取数据就是一个ajax时间,在第一个combobox中获得第二个combobox对象:

.$.get(ctx+'region/ajaxRegionList.html',{parentid:newValue},function(data){
var ed=$("#"+frm+"#addresstest").datagrid('getEditor',{
index:$rowIndexForAddress,//当前正在编辑的行的index
field:'country',//第二个combobox的列名
});
$(ed.target).combobox('clear');
$(ed.target).combobox('loadData',data);
},'json');

$rowIndexForAddress可以在onbeforeedit中获得, 在onafteredit中清空。
2. $.get(ctx+'region/ajaxRegionList.html',{parentid:newValue},function(data){
var row = $("#"+frm+" #addresstest").datagrid('getSelected');
var rindex = $("#"+frm+" #addresstest").datagrid('getRowIndex', row);
var ed = $("#"+frm+" #addresstest").datagrid('getEditor', {
index : rindex,
field : 'country',
});
$(ed.target).combobox('clear');
$(ed.target).combobox('loadData', data);
},'json');
推荐第一种方法。第二种方法有bug,问题存在这一句上:var row = $("#"+frm+" #addresstest").datagrid('getSelected'); datagrid中有两条数据,你修改了第一条,第一条处于编辑状态, 你再点击第二条。然后再回到第一条。这个时候 row是第二条, index是1(本应该是0);


{field:'province',title:'省份',align:'center',width:100,
editor:{
type:'combobox',
options:{
valueField:'code',
textField:'name',
editable:false,
panelHeight:'100',
required:true,
queryParams:{parentid:'0'},
url:ctx+'region/ajaxRegionList.html',
onChange:function(newValue,oldValue){
$.get(ctx+'region/ajaxRegionList.html',{parentid:newValue},function(data){
var ed=$("#"+frm+"#addresstest").datagrid('getEditor',{
index:$rowIndexForAddress,
field:'country',
});
$(ed.target).combobox('clear');
$(ed.target).combobox('loadData',data);
},'json');
},
onLoadSuccess:function(){
var target=$(this);
var data=target.combobox("getData");
var options=target.combobox("options");
if(data&&data.length>0){
var fs=data[0];
target.combobox("setValue",fs[options.valueField]);
}
},
formatter:function(row){
var opts=$(this).combobox('options');
return row[opts.textField];
},
onSelect:function(record){
$protext=record.name;
},
}},
},
{field:'country',title:'市区',align:'center',width:100,
editor:{
type:'combobox',
options:{
valueField:'code',
textField:'name',
editable:false,
panelHeight:'100',
required:true,
onChange:function(newValue,oldValue){
$.get(ctx+'region/ajaxRegionList.html',{parentid:newValue},function(data){
var ed=$("#"+frm+"#addresstest").datagrid('getEditor',{
index:$rowIndexForAddress,
field:'street',
});
$(ed.target).combobox('clear');
$(ed.target).combobox('loadData',data);
},'json');
},
onLoadSuccess:function(){
var target=$(this);
var data=target.combobox("getData");
var options=target.combobox("options");
if(data&&data.length>0){
var fs=data[0];
target.combobox("setValue",fs[options.valueField]);
}
},
formatter:function(row){
var opts=$(this).combobox('options');
return row[opts.textField];
},
onSelect:function(record){
$citytext=record.name;
},
}},
},
{field:'street',title:'街道',align:'center',width:100,
editor:{
type:'combobox',
options:{
valueField:'code',
textField:'name',
editable:false,
panelHeight:'100',
required:true,
onLoadSuccess:function(){
var target=$(this);
var data=target.combobox("getData");
var options=target.combobox("options");
if(data&&data.length>0){
var fs=data[0];
target.combobox("setValue",fs[options.valueField]);
}
},
formatter:function(row){
var opts=$(this).combobox('options');
return row[opts.textField];
},
onSelect:function(record){
$streettext=record.name;
$countyId=record.code;
}
}}
},
{field:'addressInfo',title:'详细地址',align:'center',width:250,
editor:{
type:'validatebox',
options:{
validtype:'lenx[50]',
required:true,
}
},
},

转载于:https://www.cnblogs.com/zhipfang/p/5714828.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值