jqGrid自定义元素单选按钮列在保存行上编辑后未返回选定值
我有一个jqGrid,它从服务获取json数据。在编辑模式下,我必须向列中添加单选按钮。这必须是内联编辑。我需要批量更新记录。 我已经创建了一个自定义元素和自定义值来显示jqGrid中jqGrid自定义元素单选按钮列在保存行上编辑后未返回选定值,jqgrid,Jqgrid,我有一个jqGrid,它从服务获取json数据。在编辑模式下,我必须向列中添加单选按钮。这必须是内联编辑。我需要批量更新记录。 我已经创建了一个自定义元素和自定义值来显示jqGrid中selectRow上的单选按钮。 我遇到的问题是,我无法获取所选单选按钮的值。相反,它总是返回第一个单选按钮的值。 代码可以找到 下面是创建自定义元素的代码 功能radioelem(值、选项){ var receivedradio=“已接收”; var naradio='NA'; 如果(值==“已接收”){ var
selectRow
上的单选按钮。
我遇到的问题是,我无法获取所选单选按钮的值。相反,它总是返回第一个单选按钮的值。
代码可以找到
下面是创建自定义元素的代码
功能radioelem(值、选项){
var receivedradio=“已接收
”;
var naradio='NA
';
如果(值==“已接收”){
var radiohtml=receivedradio+'checked=“checked”+特征线+naradio+endnaradio;
返回radiohtml;
}
else if(值='NA'){
var radiohtml=receivedradio+breakline+naradio+'checked=“checked”+endnaradio;
返回radiohtml;
}
否则{
返回接收DRADIO+特征线+naradio+endnaradio;
}
};
函数值(元素、操作、值){
如果(操作=='get'){
返回$(elem.val();
}else if(操作=='set'){
if($(elem).is(':checked')==false){
$(elem).filter('[value='+value+']').attr('checked',true);
}
}
};
代码中的主要问题是自定义元素
(函数radioelem
)的实现返回的HTML片段不是一个元素<代码>无线电元素
返回
作为字符串。它由两个输入元素组成。因此,自定义控件在本例中失败。如果您检查代码jqGrid如何使用它,您将能够理解这个问题。看看我用简化的形式重写的jqGrid代码,如下所示
var celm=options.custom_元素.call($t,vl,options);
如果(celm){
celm=$(celm.addClass(“customelement”).attr({id:options.id,name:options.name});
$(elem).empty().append(celm);
}
jqGrid使用$(celm)
其中celm
是从自定义元素
函数返回的字符串。在您的情况下,$(celm)
将是两个
元素的jQuery包装器。我的意思是$(celm)==2
。因此,代码$(celm).addClass(“customelement”)
将向两个
元素添加类“customelement”,而不是在一个自定义元素上设置类“customelement”。下一次调用(调用attr
)在两个
元素上设置相同的id
。您如何知道id必须是唯一的,但代码确实会产生重复的id
确切地说,您实现的自定义_元素
(函数radioelem
)会返回更复杂的HTML片段
如果您检查从HTML片段最后生成jqGrid的代码,您将看到非常有趣和非常错误的HTML片段,如下所示
收到
NA
可能您以前从未见过如此奇怪的
元素。您可以看到代码片段包含4个具有相同id=“2\u NA”
的元素。在这之后,您不应该奇怪自定义控件的工作方式与预期不符
要解决此问题,只需将返回的代码放在..
或..
的前面即可:
功能radioelem(值、选项){
var receivedradio='Received
',
纳拉迪奥='NA
';
如果(值=='已接收'){
返回“+receivedradio+”checked=“checked”+特征线+naradio+endnaradio+”;
}
如果(值=='NA'){
返回“+receivedradio+breakline+naradio+”checked=“checked”+endnaradio+”;
}
返回“+receivedradio+breakline+naradio+endnaradio+”;
}
@Oleg已经回答了这个问题。工作演示是