动态表单元素。使用JS更新当前值

时间:2017-01-21 16:55:43

标签: javascript php jquery arrays loops

我有一个表单,用户可以动态生成多个表单元素(重复选择框)。与我的问题相关的表单代码如下。

for ($i=0; $i < $number; $i++) {                            
    <label for="is_business"> Is A Business?</label>
    <select class="target form-control look2" id="is_business" name="is_business//note the array on name
        <option value="" selected disabled="disabled">select option</option>
        <option value="1">Yes</option>
        <option value="0">No</option>                                                                                       
    </select>
}                           

我使用此表单发布一个数组$ _POST [is_business],然后我将其序列化(用于数据库输入)。无论用户生成的选择框的数量如何,所有都能很好地工作。

现在我要做的是在动态表单中设置每个选择框,并从数据库中选择以前发布的值并进行反序列化。我检查了从数据库中选择的数据,它看起来也很好,未按序列化的字符串(即数组)按预期打印...

//unserialized array values selected from database. Count was set to three. Answers were all 'yes'

[is_business_db] => Array(
    [0] => 1 //yes
    [1] => 1 //yes
    [2] => 1 //yes
)

问题:我想使用is_business_db数组值,以便每个动态生成的选择框.... name = is_business [] ...在用户返回页面时显示正确的选定值。我已经尝试将以下javascript插入我的php循环(显然关闭/打开php标签),这对于生成的第一个选择框工作正常。

<script>
    $('#is_business').val('<?php echo $is_business_status?>');
</script>

我也试过(并不是真的期待成功)在我脚本末尾的单独循环中插入相同的js ...同样的问题......只更新了第一个选择框。

<?php

    for ($i=0; $i < $number; $i++) //php loop
    {
        $is_business_status=$is_business_db[$i];
?>
        <script>
            $('#is_business').val('<?php echo $is_business_status?>');
        </script>
<?php   
    }
?>      

显然我无法正确执行循环。任何帮助,将不胜感激。

1 个答案:

答案 0 :(得分:0)

如果有人对这个问题感兴趣,经过几个小时的搔痒,我意识到我做了一件明显错误的事情,现在已经解决了这个问题。它并不是特别优雅,但它适用于任何在动态创建的选择框中挣扎的人在刷新或页面vists上返回选定的值。

回显的html ....

                      //$is_business_db=serialize($is_business) create array from database string
                      //$number=count($is_business_db)

                        for ($i=0; $i < $number; $i++)  //number is a count of the array values

                        <div class="input_field_remove">                    
                                <div class="form-group">

                                        <label for="is_business"> Is A Business?</label>
                                        <select class="target form-control look2" id="is_business'.$i.'" name="is_business[]">
                                            <option value="" selected disabled="disabled">select option</option>
                                            <option value="1">Yes</option>
                                            <option value="0">No</option>

                                          </select>
                                </div>
                        </div>

然后是javacript ...... notes ...使用json编码来捕获javascript中的php数据( - 作为未序列化的数据库字符串,即php数组)。

                    <?php $index_max=count($is_business_db) ?>

                    <script>
                            var index_max='<?php echo $index_max;?>';
                            var value = <?php echo json_encode($is_business_db) ?><!---this is the critical bit---->
                            //var data = JSON.parse(value);//this is recommended -NOT USED- to ensure good js code-but not crucial in all situations

                            //now loop the javascript array and push the current selected values to the user-generated select boxes
                            for (index=0; index < index_max; index++)
                            {
                            $("#is_business"+ index).val(value[index]); 
                            }
                    </script>

我希望将来可以帮助某人。