根据php中填写的输入字段更改输入字段值

时间:2015-10-21 00:58:17

标签: php ajax wordpress forms

我想我在这里需要建议。我不确定我是否以正确的方式这样做。所以我有这个输入字段值从数据库(选项表)中获取。

<!-- input to get amount of people -->
            <tr>
                <th scope="row"><?php _e('How many people do you want to add?', 'keeping-points'); ?></th>
                <td>
                    <input type="text" size="15" name="posk_options[ppl_amount]" value="<?php _e( $options['ppl_amount'], 'keeping-points'); ?>" />
                </td>
            </tr>

            <?php dlaugh_ppl_names(); ?>

用户键入他们想要输入字段的用户数量,下面的函数(dlaugh_ppl_names)将在提交表单时创建输入字段。它通过for循环来创建字段数。

function dlaugh_ppl_names() {

    $options = get_option('posk_options');
    $name_num = $options['ppl_amount'];
    for($i=0;$i < $name_num; $i++) {

        $point = "txt_" . $i;
        $name_build = $point . "_name";
        $point_total = $point . "_point_total";
        $name_print = $options[$name_build];
        $changed_name = str_replace(' ', '_', $name_print);
        $point_build = "point_total_" . $changed_name;

        if ($options[$name_build] == "") {
            $set_points = $name_num - $i;
            echo $i;
            $final_ppl = $name_num - $set_points;
            $options['ppl_amount'] = $final_ppl;
            $options[$name_build] = null;
            if ($options[$name_build] == null) {
                $options[$point_total] = null;
            }
            $options = array_filter( $options );
            update_option( 'posk_options', $options );
            break;
        }

        if ($options[$name_build] == true) {

        ?>
                    <!-- Add Person Name -->
                    <tr>
                        <th scope="row">
                        <?php if ($options[$name_build] == "" ) {
                            _e('Person ' . $i + 1, 'keeping-points'); ?>
                            <?php } else
                             _e($options[$name_build], 'keeping-points');

                            ?>
                            </th>
                        <td>
                            <input type="text" size="20" name="posk_options[<?php echo $name_build ?>]" value="<?php _e( $options[$name_build], 'keeping-points'); ?>" />
                            <input type="text" size="10" name="posk_options[<?php echo $point_build; ?>]" value="<?php _e( $options[$point_build], 'keeping-points'); ?>" />
                        </td>
                    </tr>
        <?php
        } 
    }

        for($i=0;$i < $name_num; $i++) {

        $point = "txt_" . $i;
        $name_build = $point . "_name";
        $point_total = $point . "_point_total";
        $name_print = $options[$name_build];
        $changed_name = str_replace(' ', '_', $name_print);
        $point_build = "point_total_" . $changed_name;

        if ($options[$name_build] == false && $options[$name_build] == null) {

        ?>
                    <!-- Add Person Name -->
                    <tr>
                        <th scope="row"><?php _e('Person' . ' ' . ($i + 1), 'keeping-points'); ?></th>
                        <td>
                            <input type="text" size="20" name="posk_options[<?php echo $name_build ?>]" value="<?php _e( $options[$name_build], 'keeping-points'); ?>" />
                            <input type="hidden" name="posk_options[<?php echo "point_total_" . $name_print ?>]" value="<?php _e( $options[$point_build], 'keeping-points'); ?>" />
                        </td>
                    </tr>
        <?php
        } 

    }


}

创建字段后,保存ppl_amount的输入将显示用户创建的字段数。 (比如输入15,按下提交,字段都会创建,然后15仍然存在。)我希望15在那里,但在提交时我希望15根据实际填写的名称输入字段的数量而改变。让我们说他们打了15 ...然后只填写5.好吧,15值将变为5。我工作的代码,但我的问题是值15被重新发送为人选择的数字,但如果我刷新页面,那么字段将按照我的预期工作。所以我希望ppl_amount根据dlaugh_ppl_names()函数填充的输入数量而改变。

希望它不会太混乱。谢谢你的建议!我想在每个输入字段填写后都有一个ajax调用来刷新页面,但那真的很烦人。我填写就像有一个简单的答案,我只是缺少。

1 个答案:

答案 0 :(得分:0)

我找到的最佳解决方案是在人员输入中添加一个类,然后计算填充了多少输入字段,然后将该值放入输入字段中并提出问题。这样,它会根据填写的输入数量动态更新该字段值。我会尽快发布一个链接到完成的WordPress插件,以防万一你想要一个完整的演示。

使用Ajax

jQuery(document).ready(function($){
        $('.people').blur(function() {
        var data = {
                    'action': 'points_action'
                };

                // since 2.8 ajaxurl is always defined in the admin header and points to admin-ajax.php
                $.post(ajaxurl, data, function(response) {
                var searchCount = $('.people').filter(function(){
                    return $(this).val();
                }).length;
                $('#ppl_amount').val(searchCount);
                });
        });

});