在我的应用程序中,用户可以创建自己的字段列表来添加产品。这是我的表单。
<div class="row productsdiv">
<input type="text" name="product[]" class="product form-control" <?php echo set_value('product[]'); ?>'>
<?php echo form_error('product[]'); ?>
<input type="hidden" name="product_id[]" <?php set_value("");?>>
<input type="text" name="price[]" class="price form-control"<?php echo set_value("price[]");?> placeholder='<?php echo lang('placeholder_price'); ?>'>
<?php echo form_error('price[]'); ?>
<input type="text" name="qty[]" class="quantity form-control"<?php echo set_value("qty[]");?>'>
<?php echo form_error('qty[]'); ?>
</span><span class="total">0</span>
<textarea name="description[]" cols="40" rows="3" class="footerinput form-control"></textarea>
<?php echo form_error('description[]'); ?>
</div><!--Product row end -->
上面的div产品是使用按钮添加更多克隆的。 我的jquery
$('#addmore').on('click', function() {
var cloneRow = $('.productsdiv:first').clone();
cloneRow.find("input").val("").end();
cloneRow.find(".total").text("").end();
cloneRow.find(".total").after('<button type="button" class="close lebel-danger" data-dismiss="alert">×</button>');
cloneRow.find(".footerinput").css({"display":"none"});
cloneRow.appendTo('#products');
我的控制员:
if($_POST){
$this->form_validation->set_rules('customer_id', $this->lang->line('validation_name_label'), 'required');
$this->form_validation->set_rules('date',$this->lang->line('validation_date_label'), 'required');
$this->form_validation->set_rules('product[]', $this->lang->line('validation_product_label'), 'required');
$this->form_validation->set_rules('price[]',$this->lang->line('validation_price_label'), 'required|is_numeric');
$this->form_validation->set_rules('qty[]',$this->lang->line('validation_quantity_label'), 'required|is_numeric');
//remaing logic here after.....
我的问题是当验证失败时,我在页面重新加载时丢失了新添加的表单字段。如何将表单错误发送回每个受尊重的表单字段,并在表单验证失败时仍然保留所有工作? 如果我不清楚,我很抱歉。如果需要,请对任何进一步的信息发表评论。
答案 0 :(得分:0)
您可以在客户端使用jquery_validator库来显示每个字段的错误:
http://www.position-absolute.com/articles/jquery-form-validator-because-form-validation-is-a-mess/
另一方面(服务器端)你可以做的就是全局验证:
$this->form_validation->set_rules('product[]', 'lang:product', 'trim|required');
答案 1 :(得分:0)
您需要使表单创建更具动态性,这意味着:将您置于循环中。类似的东西:
$countProducts = 1;
if ($this->input->post("submit", TRUE)) {
$countProducts = $this->input->post("product", TRUE);
}
for ($i = 0; $i < $countProducts; $i++){
echo "<div class='row productsdiv'>";
echo "<input type='text' name='product[" . $i . "]' class='product form-control'" . set_value("product[" . $i . "]");
// echo the other items
echo "</div>";
}
要更轻松地创建表单和验证,请查看表单生成库http://frankmichel.com/formgenlib/user_guide/installation/install.html