嗨,大家好,我在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>


控制器

$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);
                        }

                }
            }

最佳答案

这样的事情可能会起作用。

在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>


控制器

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

$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);
}

关于javascript - Codeigniter和javascript-添加动态输入和单选字段,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23518757/

10-12 13:02