Codeigniter和javascript-添加动态输入和无线电字段

时间:2014-05-07 13:09:11

标签: javascript php jquery forms codeigniter

大家好,我在javascript和php中非常新鲜。我正在创建一个页面,用户可以选择创建一个广播或输入字段供其他人解决。

一切正常,但是当我保存表单时,字段不是我添加的顺序,因为我首先遍历输入'字段,然后通过广播电台'领域。我知道这可能不是这样做的方法,请随意给我一个替代方案。

任何帮助将不胜感激,提前谢谢。

查看

  <h1>Add questions</h1>
<form action="" method="post">
<div id='pit'>
       <span id="add_input"><a href="#" class='button' style='font-size:1.5em;'><span>&raquo; add input </span></a></span><br>
        <span id="add_radio"><a href="#" class='button'style='font-size:1.5em;'><span>&raquo; Dodaj yes/no question</span></a></span>
</div>
<input type="hidden" name="id" value="<?= $this->uri->segment(3); ?>" />
   <input id="go" class="button" name="submit" type="submit" value="Save" />
</form>
<script type="text/javascript">
var count = 0;
var a=0;
$(function(){
    $('span#add_input').click(function(){
        count += 1;
        $('#pit').append('<p><strong>Pitanje #' + count + '</strong>'+ '<input id="field_' + count + '" name="fields[]' + '" type="text" /></p>' );
        a=count;
        document.write(a);
    });
});</script>
<script type="text/javascript">
var count = 0;
$(function(){
    $('span#add_radio').click(function(){
        count += 1;
        $('#pit').append('<p><strong>DA/NE #' + count + '</strong>'+ '<input id="radio_' + count + '" name="radios[]' + '" type="text" /></p>' );
    });
});</script>

CONTROLLER

$id=$this->input->post('id');
    if($_POST['fields']){
                    foreach ( $_POST['fields'] as $key=>$value ) {
                        $tip='input';
                        if($value!=''){
                            $this->page_model->add_questions($id,$value,$tip);
                        }

                    }
                }
                if($_POST['radios']){


                    foreach ( $_POST['radios'] as $key=>$value ) {
                        $tip='radio';
                        if($value!=''){
                            $this->page_model->add_questions($id,$value,$tip);
                        }

                }
            }

1 个答案:

答案 0 :(得分:1)

这样的事情可能有用。

在JavaScript中维护相同的count变量,以跟踪创建的输入。

不使用name="fields[]",而是使用name="field_' + count + '",这样您就可以在控制器中循环迭代。

查看

<script type="text/javascript">
var count = 0;
var a=0;
$(function(){
    $('span#add_input').click(function(){
        count += 1;
        $('#pit').append('<p><strong>Pitanje #' + count + '</strong>'+ '<input name="field_' + count + '"  type="text" /></p>' );
        a=count;
        document.write(a);
    });

    $('span#add_radio').click(function(){
        count += 1;
        $('#pit').append('<p><strong>DA/NE #' + count + '</strong>'+ '<input name="radio_' + count + '" type="text" /></p>' );
    });
});
</script>

CONTROLLER

使用正则表达式提取必要的值。

$inputs = array();
$id=$this->input->post('id');
foreach($_POST as $key => $value) {
    $matches = array();
    if (preg_match('/(field|radio)_([\d]+)', $key, $matches)) {
        $tip = $matches[1];
        $count = $matches[2];
        $inputs[$count] = array($id, $value, $tip);
    }
}

循环遍历新的$inputs数组以调用add_questions方法。

ksort($inputs);
foreach($inputs as $array) {
    $id = $array[0];
    $value = $array[1];
    $tip = $array[2];
    $this->page_model->add_questions($id,$value,$tip);
}