Захват полей динамической формы с помощью Coldfusion

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

Я использую плагин jQuery relCopy для добавления полей «Ингредиент» в свою форму. (Я бы связал, но он разрешает только один.) Это начало нескольких проблем:

  1. У меня есть флажки как часть «дублированных» элементов формы. Они увеличиваются по идентификатору, но если все не выбрано, я просто получаю уведомление о количестве выбранных элементов, а не о том, какие конкретные записи были выбраны.

  2. После того, как я отправил информацию, я понятия не имею, как написать цикл в ColdFusion, чтобы пройти и получить информацию, отправленную в базу данных.

  3. Как я могу редактировать существующие записи?

Если я разберусь с 1 и 2, я думаю, что смогу работать над № 3. Вы можете просмотреть пример того, что я пытаюсь сделать здесь http://jquery.previewsite.us

Любая помощь будет принята с благодарностью.


person Luther    schedule 15.09.2010    source источник


Ответы (3)


Область формы в ColdFusion — это структура. Это означает, что вы можете исследовать ее, как и любую другую структуру. Попробуйте использовать structKeyList(), например, чтобы увидеть все ключи формы. Затем вы можете работать с любым полем формы, используя запись в квадратных скобках, #form[somekey]#. Вы также можете использовать cfdump в форме, чтобы увидеть, что было отправлено.

person Raymond Camden    schedule 15.09.2010

Из того, что я видел в вашем примере, проблема заключается в том, что идентификаторы элементов формы добавляются с увеличением числа, а имена - нет.

Это означает, что если у вас есть 2 ингредиента, вы получите что-то вроде:

form.quantity = "1,3"
form.quantityType = "tablespoon,cup"
form.ingredient = "oil, flour"
form.notes = "canola,sifted"
form.isheading = "true,false"

Вы можете попытаться предположить, что заказы всегда будут одинаковыми (и они, вероятно, будут, но это слишком много волшебства для меня), и сделать что-то, где вы перебираете длину поля, которое, как вы знаете, должно быть заполнено. Вы можете сделать скрытое поле или что-то в этом роде, но оно будет выглядеть примерно так:

<cfset ingredients = arrayNew(1)>
<cfloop from="1" to ="#listLen(form.quantity)#" index="i">
  <cfset ingredient = structNew()>
  <cfset ingredient.quantity = listGetAt(form.quantity,i)>
  <cfset ingredient.quantityType = listGetAt(form.quantityType,i)>
  {and so on...}
  <cfset listAppend(ingredients,ingredient)>
</cfloop> 

и в конечном итоге с набором ингредиентов.

Что я действительно хотел бы сделать, так это заставить имена форм иметь итеративный номер, а затем вы могли бы собрать их с помощью чего-то вроде

form["quantity#i#"] - which would give you the value of quantity1, quantity2, etc.
person Edward M Smith    schedule 15.09.2010
comment
Да, использование номера счетчика - это путь, ИМО. При использовании другого метода (то есть функций списка) код, вероятно, взорвется в первый раз, когда любое из значений поля будет содержать запятую... - person Leigh; 16.09.2010

В итоге я изменил relCopy.js, поскольку текущая версия изменяет только идентификаторы полей формы, но имена остаются прежними, вызывая путаницу. Если кто-то поставит запятую или не установит флажок, это приведет к большому взрыву кода.

Я просто добавил этот раздел в файл js, и это дало мне уникальные имена полей. Затем я просто использовал тот же счетчик на стороне сервера CF, проверил и сослался на поля формы.

// Increment Clone Names
if ( $(clone).attr('name') ){
    var newid = $(clone).attr('name') + (counter +1);
    $(clone).attr('name', newid);
};

// Increment Clone Children Names
$(clone).find('[name]').each(function(){
    var newid = $(this).attr('name') + (counter +1);
    $(this).attr('name', newid);
});
person filmibuff    schedule 31.01.2014