0

我在一行中有一个动态创建的下拉框。我在屏幕上填充那个框。有没有办法可以使用 cfquery 从 sql server 获取信息并填充下拉框。我想在javascript中做吗?

这是我的代码:

<script language="javascript" type="text/javascript">
function addRow() {

    var tbl = document.getElementById('tblSample');
    var lastRow = tbl.rows.length;  
    var iteration = lastRow;
    var row = tbl.insertRow(lastRow);

  // left cell
    var cellLeft = row.insertCell(0);
    var textNode = document.createTextNode(iteration-3);
    cellLeft.appendChild(textNode);

      // select cell
    var cellRightSel = row.insertCell(1);
    var sel = document.createElement('select');
    sel.name = 'sectCode' + iteration;
    sel.id = 'sectCode' + iteration;    
    sel.options[0] = new Option('---Any---', '0');
    sel.options[1] = new Option('Level 0.5: test1, '1');
    sel.options[2] = new Option('Level I: test2', '2');
    sel.options[3] = new Option('Level I.D: test3', '3');
    sel.options[4] = new Option('Level II.1: test4', '4');
    sel.options[5] = new Option('Level II.5: test5', '5');
    cellRightSel.appendChild(sel);

}
4

4 回答 4

2

好吧,如果您的页面是.cfm(我假设是),为什么不直接使用 ColdFusion 直接生成整个选择 HTML?你有什么特别的理由要避免这种情况吗?

<select name="test">
    <cfoutput query="yourQuery">
        <option value="#yourQuery.value#">#yourQuery.text#</option>
    </cfoutput>
</select>

但是,如果您想将数据结构从 ColdFusion 传递给 JavaScript,则可以使用 JSON 等数据交换格式来完成。您的 JavaScript 代码可以进行 Ajax 调用来检索数据,或者您可以直接在页面中输出 JSON 并使其在 JS 中可访问,如下所示:

<script>
    var optionsData = <cfoutput>#serializeJson(yourQuery)#</cfoutput>;
</script>

在这种情况下,optionsDataJS 变量将引用一个包含查询数据的对象。您可以在此处找到有关序列化查询的更多信息。

于 2013-03-30T13:59:15.307 回答
1

另一种方法是使用cfformand cfselect

<cfform>
    <cfselect name="something" 
              query="yourquery" 
              value="AFieldFromTheQuery" 
              display="AnotherFieldFromTheQuery">

    ... etc
</cfform>
于 2013-03-30T14:34:35.190 回答
0

plalx 的回答很好,但如果你真的想用 Javascript 来做,你可以简单地做这样的事情:

sel.options[0] = new Option('---Any---', '0');
<cfoutput query="yourQuery">
    sel.options[#yourQuery.CurrentRow#] = new Option('#yourQuery.value#', '#yourQuery.text#');
</cfoutput>

您可能还想使用 ColdFusion 的 JSStringFormat 函数来防止查询中这些值中的撇号之类的东西导致您的 Javascript 出现任何问题:

sel.options[0] = new Option('---Any---', '0');
<cfoutput query="yourQuery">
    sel.options[#yourQuery.CurrentRow#] = new Option('#JSStringFormat(yourQuery.value)#', '#JSStringFormat(yourQuery.text)#');
</cfoutput>
于 2013-03-30T20:30:32.567 回答
0

You can do as plalx mentioned or you can use the CFSELECT tag similar to this.

   <!--- Get data --->
    <CFQUERY DATASOURCE="datasource" NAME="qData">
    SELECT fieldname, ID
    FROM qTable
    ORDER BY ID
    </CFQUERY>

  <cfform>  
    <CFSELECT NAME="name"
    query="qData" 
    display="fieldname"
    width="250" 
    value="ID"><option value="" selected="selected">default value</option></CFSELECT>
  </cfform>
于 2013-03-31T22:17:58.030 回答