Как заполнить динамически создаваемый выпадающий список с использованием JavaScript и Coldfusion

У меня есть выпадающий список в строке, которая была создана динамически. Я заполняю это поле на экране. Есть ли способ, которым я могу использовать cfquery, чтобы получить информацию с сервера SQL и заполнить раскрывающийся список. Я хотел бы сделать это в рамках 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 ответа

Решение

Ответ 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>

Что ж, если ваша страница имеет формат.cfm (я предполагал, что это так), то почему бы просто не сгенерировать весь выбранный HTML напрямую с помощью ColdFusion? Есть ли какая-то особая причина, по которой вы хотите этого избежать?

<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>

В этом случае optionsData Переменная JS будет ссылаться на объект, который содержит данные вашего запроса. Вы можете найти больше информации о сериализации запросов здесь.

Другой способ заключается в использовании cfform а также cfselect:

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

    ... etc
</cfform>

Вы можете сделать так, как упомянул plalx, ​​или использовать тег CFSELECT, подобный этому.

   <!--- 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>
Другие вопросы по тегам