【问题标题】:Adding Dynamic Field to Forms (Chronoform)向表单添加动态字段(Chronoform)
【发布时间】:2011-01-30 10:41:43
【问题描述】:

我正在为 Joomla 使用流行的 ChoronoForm 插件。我创建了一个包含动态字段的表单。一个javascript函数用于添加多个“项目”。用户单击“添加另一个项目”按钮,然后重新显示项目字段以供他们插入其他“项目”。类似于本网站http://www.unclesmoney.co.uk/home3.php 上的表格(填写项目详细信息部分并单击“添加另一个项目”)。提交表格后,信息将通过电子邮件发送。问题是,仅发送最后插入的项目,而忽略其他项目(未发送),例如如果我用 2 个或更多项目填写表格,则只会发送他填写的最后一个项目的详细信息。假设我必须编写一些 php 或 javascript 来将这些值传递给 html 模板,还是有更简单的方法?无论哪种方式,我都可以提供一些关于如何实现这一目标的指示。这个论坛上有一个类似的帖子,它很有帮助,但它没有显示如何修改 html 模板。谢谢

    <div class="form_element cf_dropdown">
    <label class="cf_label" style="width: 150px;">Item Type:</label>
    <select class="cf_inputbox validate-selection" id="select_19" size="1" title=""  name="select_19">
    <option value="">Choose Option</option>
      <option value="Option 1">Option 1</option>
<option value="Option 2">Option 2</option>
<option value="Option 3">Option 3</option>
<option value="Option 4">Option 4</option>
<option value="Option 5">Option 5</option>

    </select>

  </div>
  <div class="cfclear">&nbsp;</div>
</div>

<div class="form_item">
  <div class="form_element cf_textarea">
    <label class="cf_label" style="width: 150px;">Detail</label>
    <textarea class="cf_inputbox required" rows="3" id="text_2" title="Please enter Item Detail" cols="30" name="text_2"></textarea>

  </div>
  <div class="cfclear">&nbsp;</div>
</div>

<div class="form_item">
  <div class="form_element cf_fileupload">
    <label class="cf_label" style="width: 150px;">File</label>
    <input class="cf_fileinput cf_inputbox" title="" size="20" id="file_3" name="file_3" type="file" />

  </div>
  <div class="cfclear">&nbsp;</div>
</div>

<div class="form_item">
  <div class="form_element cf_textbox">
    <label class="cf_label" style="width: 150px;">File 2</label>
    <input class="cf_inputbox required validate-number" maxlength="150" size="30" title="Must contain a value" id="text_4" name="text_4" type="text" />

  </div>
  <div class="cfclear">&nbsp;</div>
</div>
</div>

<span id="writeroot"></span>
<input type="button"  value="Add Another Item"  onclick="moreItems()" />
.....

Javascript

    var counter = 0;

function moreItems() {
   counter++;
   var newFields = document.getElementById('readRoot').cloneNode(true);
   newFields.id = '';
   newFields.style.display = 'block';
   var newField = newFields.childNodes;
   for (var i=0;i<newField.length;i++) {
      var theName = newField[i].name
      if (theName)
         newField[i].name = theName + counter;
   }
   var insertHere = document.getElementById('writeroot');
   insertHere.parentNode.insertBefore(newFields,insertHere);
}

【问题讨论】:

    标签: php javascript joomla


    【解决方案1】:

    Chronoforms 在电子邮件模板中进行了简单的替换以填写表单值。除非您有一些代码来操作它,否则它只需要一个值。您需要做的是在“表单代码”选项卡的“提交代码 - 发送电子邮件之前”区域中添加一些 PHP。快速循环遍历所有额外字段,将它们组合成 Chronoforms 期望的单个变量名称,应该可以解决您的问题。

    【讨论】:

    • 布伦特,感谢您的回复。如您所见,我使用的是客户端 Javascript,除非我弄错了,否则我无法在服务器端 php 中引用 js 变量。如何获取对这些“额外”变量的引用以便将它们放入循环中?一个例子将不胜感激,因为我有点卡住了。
    • 由于您的 javascript 只是添加了额外的表单字段,因此生成的字段都作为 $_POST 的一部分提交。为了遍历发送的所有内容,您可以使用它 - foreach($_POST as $k=>$v) $$k=$v;
    猜你喜欢
    • 1970-01-01
    • 2012-08-17
    • 1970-01-01
    • 1970-01-01
    • 2012-06-27
    • 2011-09-02
    • 1970-01-01
    • 1970-01-01
    • 2016-08-26
    相关资源
    最近更新 更多