我在我的coldfusion项目中有一个基本的jqGrid工作。 我在jqGrid中的一个字段是一个组合框。目前,editoption值的硬编码如下所示。
colModel :
[
{
name:'seqnum',index:'seqnum', width:100,resizable:true,
align:"left",sorttype:"text",editable:true,edittype:"select",editoptions:
{ value:"1:one;2:two"},editrules:{required:true}
}
]
我正试图找出一种方法来填充查询/网址的下拉列表。
非常感谢任何帮助。
提前致谢
答案 0 :(得分:6)
创建一个使用json查询url的函数。此函数应返回格式为“1:one; 2:two”的字符串。
例如:
colModel :
[
{
name:'seqnum',index:'seqnum', width:100,resizable:true,
align:"left",sorttype:"text",editable:true,edittype:"select",editoptions:
{ value:getSequenceNumbers()},editrules:{required:true}
}
]
function getSequenceNumbers(){
$.getJSON("yourUrl", null, function(data) {
if (data != null) {
//construct string.
//(or the server could return a string directly)
}
});
}
我想你也可以把函数放在内联中,但我认为它会更难阅读。
答案 1 :(得分:6)
$ .getJSON / getSequenceNumbers()答案无效。无法从回调中返回数据作为getSequenceNumbers()的返回值,因为回调是异步的。您需要使用Martin建议的dataURL方法或在$ .getJSON回调中设置jqGrid。
$(document).ready(function() {
$.getJSON("GetURL", function(data) {
setupGrid(data);
});
});
function setupGrid(data) {
...
colModel :
[
{
name:'seqnum',index:'seqnum', width:100,resizable:true,
align:"left",sorttype:"text",editable:true,edittype:"select",editoptions:
{ value:data},editrules:{required:true}
}
]
...
}
答案 2 :(得分:5)
使用dataUrl
...(see the wiki here)。
目前dataUrl生成一个GET,但如果从Github中提取代码,则GET可以更改为POST而没有明显的副作用。
答案 3 :(得分:4)
值得注意的是,如果您使用的是服务器端脚本语言,则可以完全回避这个问题。例如,使用PHP,您可以使用
{name:'myselectdata', index:'myselectdata', width:160, formatter:'select', editable:true, edittype:"select", cellsubmit:"clientArray", editoptions:{ <? echo getData() ?>} },
然后只需在页面上方设置PHP函数getData()以返回合适的字符串,例如
'value:"1:one;2:two"';
可能不像处理jQuery中的所有内容那样优雅或可移植,但在概念上我认为更容易。
答案 4 :(得分:3)
让我们说在你的ColModel中你有一个这样的列:
{name:'id_UDM', index:'id_UDM', width:150, editable:true, edittype:"select", editoptions:{dataUrl:'filename.php'}}
首先必须声明它的select元素:
edittype:"select"
然后,在editoptions参数中添加一个dataUrl,如下所示:
editoptions:{dataUrl:'filename.php'}
filename.php必须返回带有选项的“select”元素,这是一个例子:
<?php
include("connectionToMyDatabase.php");
$query1 = "SELECT * FROM table WHERE
$result1 = mysql_query($query1);
$response ='<select>';
while($row = mysql_fetch_array($result1)) {
$response .= '<option value="'.$row['value'].'">'.$row['name'].'</option>';
}
$response .= '</select>';
echo $response;
mysql_close($db);
?>
希望这有帮助。
答案 5 :(得分:1)
我知道这是一个老问题,但我发现了同样的问题。
我通过dataUrl和ajaxSelectOptions的组合来解决这个问题。
colModel:[
//class_id
$.extend(true,
{
name:'class_id'
,index:'class_id'
,edittype:'select'
,formatter:'select'
,editoptions: { dataUrl:"db.php?ajaxOp=getClassesOptions" } //to send dynamic parameter, combine with ajaxSelectOptions
}
,{}
)
请注意,dataUrl字符串是静态的,意味着每次添加/编辑时都不能发送不同的参数。下面的代码不会工作!
,editoptions: { dataUrl:"db.php?ajaxOp=getClassesOptions" + "&id="+selected_id }
要发送此类id的参数,您可以使用ajaxSelectOptions。
ajaxSelectOptions: //use this for combination with dataUrl for formatter:select
{
data: {
id: function () {
return selected_id;
}
}
},
每次添加/编辑时,都会执行返回selected_id的函数。希望这有帮助!
答案 6 :(得分:0)
我修改了searchoptions的代码而不是editoptions。然而,它会自动选择第一个选项并过滤列表,因此我添加了以下内容以减轻这一点。
$response ='<select>';
$response .= '<option value=""></option>';
while($row = $stmt->fetch(PDO::FETCH_NUM)) {
$response .= '<option value="'.$row[0].'">'.$row[0].'</option>';
}
$response .= '</select>';
echo $response;