6

我在我的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}
  }
]

我正在尝试找出一种从查询/url 填充下拉列表的方法。

任何帮助将不胜感激。

提前致谢

4

7 回答 7

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)
            }
        });
    }

我想您也可以将函数内联,但我认为它会更难阅读。

于 2009-05-18T12:59:15.913 回答
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}
      }
    ]

...
}
于 2010-04-26T16:33:00.040 回答
5

使用dataUrl...(请参阅此处的 wiki)。

目前 dataUrl 生成一个 GET,但是如果从 Github 中提取代码,则 GET 可以更改为 POST,而没有明显的副作用。

于 2009-09-18T21:09:11.063 回答
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 中处理所有东西那样优雅或便携,但我认为在概念上更容易。

于 2011-07-27T12:36:52.313 回答
3

假设在您的 ColModel 中有这样的列:

{name:'id_UDM', index:'id_UDM', width:150, editable:true, edittype:"select", editoptions:{dataUrl:'filename.php'}}

您必须首先声明它是一个选择元素:

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);  
?>

希望这可以帮助。

于 2012-10-10T19:43:05.163 回答
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 的函数。希望这可以帮助 !

于 2012-11-28T20:32:30.693 回答
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;
于 2014-09-08T19:34:54.273 回答