Javascript 如何使用jqGrid editoptions值的函数创建有效字符串?

Javascript 如何使用jqGrid editoptions值的函数创建有效字符串?,javascript,jquery,json,ajax,jqgrid,Javascript,Jquery,Json,Ajax,Jqgrid,我尝试使用函数为editoptions值生成一个字符串。 字符串应如下所示:“1:活动;2:不活跃;3:待定;4:暂停。 如果我尝试使用这个字符串作为值,网格上的select会正常工作,但是当我使用完全相同的函数生成它时,它就不工作了。你能告诉我怎么了吗 jqGrid代码: { 标签:'状态', 姓名:'status', 是的, 编辑类型:选择, stype:“选择”, 格式化程序:'select', 编辑选项:{value:generate} } 以及功能 函数生成{ var s=; $.aj

我尝试使用函数为editoptions值生成一个字符串。 字符串应如下所示:“1:活动;2:不活跃;3:待定;4:暂停。 如果我尝试使用这个字符串作为值,网格上的select会正常工作,但是当我使用完全相同的函数生成它时,它就不工作了。你能告诉我怎么了吗

jqGrid代码:

{ 标签:'状态', 姓名:'status', 是的, 编辑类型:选择, stype:“选择”, 格式化程序:'select', 编辑选项:{value:generate} } 以及功能

函数生成{ var s=; $.ajax{ 类型:GET, url:rst/crud/selectStatus, 数据类型:json, contentType:application/json, 成功:函数数据{ response=$.parseJSONJSON.stringifydata; $.eachresponse,functioni,item{ s+=响应[i]。id+:+响应[i]。状态+;; }; s=s.substring0,s.length-1; //警报; } }; 返回s; } 当前使用的$.ajax调用将异步执行。在这种情况下,您应该使用editoptions的另一个功能:dataUrl和buildSelect。问题只在于该功能适用于网格的编辑,而不适用于您使用的格式化程序“select”。格式化程序将用于填充网格以处理服务器响应


我在中描述了这种情况的解决方案。只需使用通过rst/crud/selectStatus提供的数据扩展服务器的标准响应,即主url。您可以在预处理之前处理中的数据,并使用setColProp修改editoptions.value dynamicali。顺便说一下,您可以根据网格列中的实际数据设置值事件。如果使用loadonce:true场景,该场景尤其实用。我的意思是:可以将值集从'1:Active'减少;2:不活跃;3:待定;4:暂停“直到列中某些值真正使用的值。这样的值对于searchoptions.value非常实用,但您仍然可以使用editoptions.value的全套允许值。

谢谢您的快速回答。我已经尝试了dataUrl和buildSelect,但在尝试添加到数据库时遇到了问题。当我使用$'jqGrid'.getRowDatarowKey;在状态列中,我从字段中获取文本,但我需要后面的id。使用值和格式化程序:“选择”getRowData为我提供可以使用的状态字段的id。是否有任何方法可以获得所选选项的值而不是使用dataUrl的文本?@Vlad:您问题的答案可能取决于您使用的jqGrid版本和jqGrid的分支,或者是@Vlad:版本中的旧jqGrid,我不确定您在哪个上下文中使用getRowData。此外,它还具有附加属性,可以将本地数据扩展到附加属性,而无需使用隐藏列。因此,您可以在从服务器返回的数据中同时使用name和id。您只能填写网格中的名称,但可以从与数据行关联的另一个属性获取id。确切的解决方案取决于您可以在jqGrid中使用的其他选项。如果您有实现问题,您可以发布新问题。我通过在AJAX调用中添加async:false解决了这个问题,现在该函数可以工作了。谢谢你的支持。@Vlad:不客气!async:false选项应该可以正常工作,但它会在收到响应之前阻止web浏览器。此外,您的代码刚刚发送另一个异步请求来填充网格。请求已发送到同一服务器。我建议您在填充网格的主数据中包含来自dataUrl的响应。这通常是对服务器代码的最小修改。然后,您将获得包含beforeProcessing中数据的新属性,并使用setColProp修改列中的editoptions.value。在这种情况下,所有这些都将异步工作。