jqGrid自定义元素单选按钮列在保存行上编辑后未返回选定值

jqGrid自定义元素单选按钮列在保存行上编辑后未返回选定值,jqgrid,Jqgrid,我有一个jqGrid,它从服务获取json数据。在编辑模式下,我必须向列中添加单选按钮。这必须是内联编辑。我需要批量更新记录。 我已经创建了一个自定义元素和自定义值来显示jqGrid中selectRow上的单选按钮。 我遇到的问题是,我无法获取所选单选按钮的值。相反,它总是返回第一个单选按钮的值。 代码可以找到 下面是创建自定义元素的代码 功能radioelem(值、选项){ var receivedradio=“已接收”; var naradio='NA'; 如果(值==“已接收”){ var

我有一个jqGrid,它从服务获取json数据。在编辑模式下,我必须向列中添加单选按钮。这必须是内联编辑。我需要批量更新记录。 我已经创建了一个自定义元素和自定义值来显示jqGrid中
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已经回答了这个问题。工作演示是