Элементы формы с одинаковыми именами недоступны при использовании CF MX7
Я использую Coldfusion MX7 и имею базовую форму, которая может иметь несколько элементов, которые динамически добавляются в форму. Им присваивается одно и то же имя, и все они имеют флажки. Пример формы следующий:
<form action="index.cfm?action=index.report" method="post" id="reportForm">
<div class="report my">
<ul class="connectWith ui-sortable" id="fieldListSelect" aria-disabled="false">
<li class="field" id="field_profileFn" style="">
<a class="action" id="action_profileFn" href="index.cfm?action=index.filter.profileFn" style="display: block; ">filter</a>
<label for="profileFn">First Name</label>
<input type="checkbox" name="reportItem" id="profileFn" value="profileFn">
</li>
<li class="field" id="field_profileSn" style="">
<a class="action" id="action_profileSn" href="index.cfm?action=index.filter.profileSn" style="display: block; ">filter</a>
<label for="profileSn">Surname</label>
<input type="checkbox" name="reportItem" id="profileSn" value="profileSn">
</li>
<li class="field" id="field_contactDate" style="">
<a class="action" id="action_contactDate" href="index.cfm?action=index.filter.contactDate" style="display: block; ">filter</a>
<label for="contactDate">Contact date</label>
<input type="checkbox" name="reportItem" id="contactDate" value="contactDate">
</li>
</ul>
</div>
</form>
После публикации формы я получаю через cfdump следующее:
<table class="cfdump_struct">
<tr><th class="struct" colspan="2" onClick="cfdump_toggleTable(this);" style="cursor:hand;" title="click to collapse">struct</th></tr>
<tr><td class="struct" onClick="cfdump_toggleRow(this);" style="cursor:hand;" title="click to collapse">CONTACTDATE_FROM</td>
<td> Thu May 19 2011 00:00:00 GMT+0100 (GMT Daylight Time) </td></tr>
<tr><td class="struct" onClick="cfdump_toggleRow(this);" style="cursor:hand;" title="click to collapse">CONTACTDATE_TO</td>
<td> Thu May 19 2011 00:00:00 GMT+0100 (GMT Daylight Time) </td></tr>
<tr><td class="struct" onClick="cfdump_toggleRow(this);" style="cursor:hand;" title="click to collapse">FIELDNAMES</td>
<td> REPORTITEM[],CONTACTDATE_FROM,CONTACTDATE_TO </td></tr>
<tr><td class="struct" onClick="cfdump_toggleRow(this);" style="cursor:hand;" title="click to collapse">REPORTITEM[]</td>
<td> profileFn,profileSn,contactDate </td></tr>
</table>
Сообщается об элементе REPORTITEM[], и при попытке получить доступ к нему как к переменной, я получаю:
<cfset testing = form.reportItem[]>
Invalid CFML construct found on line 6 at column 50.
При попытке получить доступ к переменной так, как я ожидал, я получил следующее:
<cfset testing = form.reportItem>
Element REPORTITEM is undefined in FORM.
Я унаследовал этот код, и он ДОЛЖЕН работать ранее. Coldfusion не был обновлен (очевидно, все еще CF 7), и ничто другое не изменило серверную сторону, о которой я могу думать.
Мои вопросы:
- Это всего лишь ограничение CF7?
- Это должно работать правильно или это абсолютно неправильно?
- Я собираюсь переписать довольно много этого кода, если это просто не сработает, обработать это после того, как данные были опубликованы, было бы легче кодировать. Изменение формы будет больше усилий, так возможно ли это?
3 ответа
Попробуй сделать
<cfset testing = form["reportItem[]"]>
Это приведет к получению структуры формы по ключу "reportItem[]".
Вы отправляете сообщение через jQuery ajax или используете обычную кнопку отправки. Я думаю, что jQuery добавляет variablename[] во время публикации, но есть способ отключить его. Но в случае кнопки отправки я получу флажок только в структуре формы, только если установлен хотя бы один флажок. В этом случае всегда используйте имя флажка cfparam со значением по умолчанию.
Насколько я знаю, у CF7 с этим проблем нет. На самом деле, я уверен, что значение ваших флажков создается браузером, а не веб-сервером или CF.
Вот что я вижу:
form.variableNamve[]
не будет работать, потому что значение возвращается в виде списка через запятую.
Вы столкнетесь с неопределенной ошибкой, если флажки не установлены, потому что если флажки с этим именем не установлены, то эта переменная не будет передана браузером и, следовательно, не будет существовать в области формы. Вы должны по умолчанию это, и есть несколько способов сделать это.
Вы можете создать новую структуру с именем флажка в качестве ключа, пустой строкой в качестве значения, а затем structAppend поверх формы формы.
Вы можете использовать традиционный тег cfparam.
Вы можете добавить скрытое поле формы с тем же именем и пустой строкой в качестве значения для формы. Это заставляет браузер возвращать поле формы, даже если флажки не установлены.
НТН.