2013-03-30 4 views
0

У меня есть раскрывающийся список в строке, которая была динамически создана. Я заполняю эту рамку на экране. Есть ли способ, с помощью которого я могу использовать cfquery, чтобы получить информацию с сервера sql и заполнить раскрывающийся список. Я хотел бы сделать это в javascript?Как заполнить динамически созданный раскрывающийся список при использовании javascript и coldfusion

Вот мой код:

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

} 
+0

Выполнение этого с помощью javascript, вероятно, является самым сложным способом заполнения выпадающего списка на странице coldfusion. Вы открываете для этого более простые способы? –

+0

Я открыт для более простого способа. – tnbumbray

ответ

0

plalx это хорошо, но если вы действительно хотите сделать это в Javascript, вы можете просто сделать что-то вроде этого:

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

Вы также можете использовать функцию JSStringFormat от ColdFusion, чтобы предотвратить такие аспекты, как апострофы внутри этих значений из запроса, вызывающие проблемы в вашем Javascript:

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

Спасибо. Все прошло отлично. – tnbumbray

2

Ну, если страница является .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 будет ссылку на объект, содержащий данные вашего запроса. Вы можете найти дополнительную информацию о сериализации запросов here.

+0

Я использую ColdFusion7, поэтому не думаю, что могу использовать JSON. – tnbumbray

+0

Существует проект под названием [JSONUtil] (http://jsonutil.riaforge.org/), который поможет вам в этом. – plalx

1

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

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

    ... etc 
</cfform> 
+0

Это будет работать для первоначального списка, но они также добавляют новые списки в DOM на лету. – Leigh

0

Вы можете использовать упомянутый 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> 
+0

Да, [Дан уже предложил использовать 'cfselect'] (http://stackoverflow.com/a/15719662/104223). Но, как упоминалось в комментариях, в нем не рассматривается исходный вопрос: как добавлять и заполнять дополнительные списки выбора с помощью * javascript *. – Leigh

 Смежные вопросы

  • Нет связанных вопросов^_^