JQuery:如何在cakePHP中验证失败后保存动态添加的表单输入

时间:2014-05-11 20:54:13

标签: javascript php jquery validation cakephp

我的注册表格有问题。因此,当用户点击链接时,我有一些字段是generetad,如果验证失败,我按下表单提交按钮后会丢失这些字段。如果验证通过,则一切正确,数据将保存到数据库中。

所以这些是那些字段,也是添加新字段的脚本:

<script> 
  $(document).ready(function() {

    var MaxInputs       = 8; //maximum input boxes allowed
    var FacebookInputsWrapper   = $("#FacebookInputsWrapper"); //Input boxes wrapper ID
    var AddButton       = $("#FacebookAddMoreFileBox"); //Add button ID

    var x = FacebookInputsWrapper.length; //initlal text box count
    var FieldCount=0; //to keep track of text box added

    $(AddButton).click(function (e)  //on add input button click
    {
        if(x <= MaxInputs) //max input box allowed
        {

        FieldCount++; //text box added increment
        //add input box
        $(FacebookInputsWrapper).append('<div style="margin-top:10px;"><input id="SocialMediaLink' + FieldCount + 'Link" type="hidden" name="data[SocialMediaLink][' + FieldCount + '][type]" value="fb" /><input id="SocialMediaLink' + FieldCount + 'Link" type="text" name="data[SocialMediaLink][' + FieldCount + '][link]" class="input-xlarge" placeholder="Facebook link" /><a style="background:0;color:black;" href="#" class="facebookremoveclass">&times;</a></div>');
        x++; //text box increment
        }
    return false;
    });

    $("body").on("click",".facebookremoveclass", function(e){ //user click on remove text
        if( x > 1 ) {
            $(this).parent('div').remove(); //remove text box
            x--; //decrement textbox
        }
    return false;
    }) 

  });
  </script>

HTML

<li><label>Facebook</label>
<div >
  <div style="float:right; margin-top:10px;" id="FacebookInputsWrapper"><?php echo $this->Form->input('SocialMediaLink.0.type',array('type'=>'hidden','value'=>'fb')); ?><?php echo $this->Form->input('SocialMediaLink.0.link',array('type'=>'text','class'=>'input-xlarge','label'=>false,'div'=>false,'placeholder'=>'Facebook link', 'error' => array(
    'attributes' => array('class' => 'inputerror')
))); ?><label  style="color:#FF0000;"><?php echo @$valid_social; ?></label>
  <a style="margin-left:10px;background : 0;color:black;" href="#" id="FacebookAddMoreFileBox">Add another Facebook account</a></div>

</div>

所以我的问题是:在验证失败后可以保存动态生成的表单字段及其值吗?

谢谢

1 个答案:

答案 0 :(得分:1)

如果我正确理解了这个问题,您需要在验证失败后在视图中显示这些动态创建的字段。这样做,检查$this->request->data这些字段:

            <?if (!empty($this->request->data['SocialMediaLink'])):?>
                <?foreach($this->request->data['SocialMediaLink'] as $i => $item):?>
                    <div style="margin-top:10px;">
                        <?=$this->Form->hidden('SocialMediaLink.' . $i . '.type', array('value' => 'fb'))?>
                        <?=$this->Form->input('SocialMediaLink.' . $i . '.link')?>
                    </div>
                <?endforeach;?>
            <?endif;?>

或者,您可以根据AddButton

中的元素数量,在页面加载时在$this->request->data['SocialMediaLink']上触发适当次数的点击事件