Элемент получения ColdFusion 10 не определен в ошибке формы

У меня есть форма ColdFusion 10, в которую я добавляю новый список множественного выбора

<SELECT multiple="multiple" id="icd9list" 
    name="icd9list" 
    size="2" 
    class="pageText2" 
    style="width:400px;">
</SELECT>

Он правильно отображается в форме, и я могу добавлять в него элементы с помощью JavaScript, но когда я перехожу к обработке формы, страница действия формы выдает следующую ошибку:

Элемент ICD9LIST не определен в FORM.

Я добавил теги cfparam на начальную страницу формы, а также на страницу действия формы, где я получаю сообщение об ошибке.

Не могу понять, почему он не передает элемент формы на страницу действий. Метод post, так что он должен его подобрать. Все остальные элементы формы на странице подхватываются нормально.

<cfform action="updform.cfm" name="custform" method="POST">

Я также пытался использовать custform.icd9list и получил ту же проблему:

Элемент ICD9LIST не определен в CUSTFORM.

Эта страница представляет собой ОЧЕНЬ устаревший код, к которому мы не можем вернуться и провести слишком много рефакторинга. Единственное, о чем я думаю, это то, что при первой загрузке страницы опция множественного выбора пуста, а затем мы добавляем к ней опции через javascript из всплывающего окна постфактум. Когда я проверяю элемент в Chrome, после того как я добавил к нему параметры, они есть, но мне интересно, обрабатывается ли он по-прежнему как пустой список множественного выбора. Я знаю, что если я удалю множественный атрибут и обработаю элемент формы как один раскрывающийся список, он появится в дампе формы со значением, но только с первым (или любым другим выбранным) значением.

Начинаю думать, что ответ может состоять в том, чтобы иметь скрытое поле с заполненными значениями параметров и позволить форме прочитать это.


person jjasper0729    schedule 27.08.2018    source источник
comment
Вы действительно что-то выбираете? Добавление элементов к множественному выбору ничего не значит, вам все равно нужно выбирать элементы. В прошлом я делал это при отправке, просто выбирая все элементы, которые были добавлены.   -  person haxtbh    schedule 27.08.2018
comment
@haxtbh Даже если вы ничего не выберете, элемент формы SELECT все равно будет там?   -  person Shawn    schedule 27.08.2018
comment
Используете ли вы какую-либо другую библиотеку JS на этой странице? Что произойдет, если вы удалите значение атрибута из нескольких и просто наберете multiple?   -  person Shawn    schedule 27.08.2018
comment
@Shawn Нет, немного похоже на флажки, переключатели или любой отключенный элемент формы. Если они не отмечены/активны и т. д., они не передаются в области формы.   -  person haxtbh    schedule 27.08.2018
comment
Хм... Я знаю, что SELECT должен иметь OPTION, но я думал, что он все равно пройдет через форму, даже если OPTION не был выбран. Я думаю, добавить это в список вещей, которые я не осознавал, я забыл или просто никогда не проверял. :-)   -  person Shawn    schedule 27.08.2018
comment
Попытка использовать custform.icd9list FWIW, вы никогда не используете имя cfform. В CF переменные POST всегда отправляются в специальную системную область с именем FORM (независимо от имени cfform/form).   -  person SOS    schedule 28.08.2018
comment
@haxtbh - Извините, не заметил, что вы уже предложили выбрать элементы. Если вы хотите опубликовать это как ответ, я удалю свой.   -  person SOS    schedule 28.08.2018


Ответы (3)


Добавления параметров в список множественного выбора недостаточно. Их тоже нужно выбрать. В противном случае список не считается успешным элементом управления и поле не будет передано на страницу действия (выделено мной)

Успешный контроль является «действительным» для отправки. У каждого успешного элемента управления есть имя элемента управления, связанное с его текущим значением, как часть набора данных отправленной формы. Успешный элемент управления должен быть определен в элементе FORM и должен иметь имя элемента управления.

Тем не мение:

  • Отключенные элементы управления не могут быть успешными.
  • Если форма содержит более одной кнопки отправки, успешно работает только активированная кнопка отправки.
  • Все флажки «включено» могут быть успешными.
  • Для переключателей с одинаковым значением атрибута имени успешным может быть только переключатель «включено».
  • Для меню имя элемента управления предоставляется элементом SELECT, а значения предоставляются элементами OPTION. Только выбранные варианты могут быть успешными. Если параметры не выбраны, элемент управления не выполняется успешно, и ни имя, ни какие-либо значения не отправляются на сервер при отправке формы.
  • Текущее значение выбора файла представляет собой список из одного или нескольких имен файлов. После отправки формы содержимое каждого файла отправляется вместе с остальными данными формы. Содержимое файла упаковывается в соответствии с типом содержимого формы.
  • Текущее значение элемента управления объектом определяется реализацией объекта.

Я подозреваю, что форма не заставляет элементы «выбираться» до отправки формы, и поэтому на странице действий ничего не отображается.

person SOS    schedule 28.08.2018

Похоже, вам нужно одно из двух

Либо требуется это на стороне клиента

<SELECT multiple="multiple" required id="icd9list" name="icd9list" size="2" class="pageText2" style="width:400px;">
...
</SELECT>

Или убедитесь, что ColdFusion может справиться с ним, которого нет на стороне сервера.

<cfparam name="icd9list" default="">

Как указано,

<cfparam name="form.icd9list" default="">

получит еще более жесткий охват

person James A Mohler    schedule 28.08.2018
comment
А еще лучше использовать оба ;-) @jjasper0729 - Также не забудьте указать область видимости в параметре cfparam, например <cfparam name="form.icd9list default=›`. - person SOS; 28.08.2018

Как вы звоните по форме? Вы используете form.variable или icd9list.variable? Вам не нужно давать ему идентификатор или имя, если на странице нет нескольких форм. Вы можете просто name и ID свой элемент и ссылаться на него следующим образом: form.name

person needingSomeAnswers    schedule 27.08.2018
comment
Я ссылаюсь на него как на form.icd9list в updform.cfm (файл действия формы) - person jjasper0729; 27.08.2018
comment
Это не то, как вы получаете доступ к переменной формы. вы в основном говорите form.form, так как вы назвали свою форму icd9list. Уберите имя и идентификатор из формы. Затем назовите и идентифицируйте входы по желанию. Пример: ‹form method=post› ‹input name=name id=name type=text›‹/form› Вы хотели бы сослаться на это как form.name - person needingSomeAnswers; 27.08.2018
comment
А также вы хотите, чтобы ваш cfparam был name=form.name, и каждый раз, когда вы его вызываете, его необходимо указывать как form.name, если только вы не cfset form.name как новое имя переменной. - person needingSomeAnswers; 27.08.2018
comment
нет... форма на самом деле называется custform (см. тег cfform в начальном посте). Я попробую посмотреть, будет ли работать custform.icd9list. icd9list — имя элемента формы - person jjasper0729; 27.08.2018
comment
Попробуйте custform.icd9list, но если это не сработает, я хотел бы взглянуть на ваш код, чтобы мне было легче сказать вам, что не так. - person needingSomeAnswers; 27.08.2018
comment
Кроме того, я хотел добавить, что обычно избегаю использования cfform. Вы можете передавать значения с одной страницы на другую, используя POST с обычными тегами формы HTML. - person needingSomeAnswers; 27.08.2018
comment
нужно было написать слишком много, чтобы поместиться в комментариях, поэтому я отредактировал вопрос @needingSomeAnswers - person jjasper0729; 27.08.2018