Захват динамических полей формы с помощью Coldfusion - PullRequest
1 голос
/ 16 сентября 2010

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

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

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

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

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

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

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

Ответы [ 3 ]

3 голосов
/ 16 сентября 2010

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

2 голосов
/ 16 сентября 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.
0 голосов
/ 01 февраля 2014

В итоге я изменил 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);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...