在元框的顶部添加X个基于表单的元框输入,如何正确操作?

时间:2011-12-17 作者:dkmojo

我正在设置一个元框,用于控制配方的成分数量。由于每个配方都有不同数量的配料,我决定使用一个简单的文本输入和按钮来设置配料的数量,并让jQuery动态添加“X”数字的输入。

我知道我需要使用jQuery表单,但不确定如何将html正确返回到元框中。我设置了一个响应div,但不确定如何处理html。

我是否可以将文本输入的值传递到php函数中,该函数使用for循环打印出所有成分的输入?或者我需要用jQuery打印所有html吗?

希望这是有意义的。

谢谢

我的jQuery有效:

    jQuery(\'#add-ingredients\').click(function(event){
        event.preventDefault();                                        
        var num = jQuery(\'input:text[name=_num_ingredients]\').val();

        var sections = \'\';
        for(var i=1;i<=num;i++){

            section = \'<div id="ingredient-\' + i + \'" class="ingredient-input">\\n\';
            section += \'<div class="ingredient-amount alignleft">\\n\';
                section += \'<label for="_ingredient_amount_\' + i + \'">Amount: </label>\\n\';
                section += \'<input type="text" name="_ingredient_amount_\' + i + \'" />&nbsp;\\n\';
            section += \'</div>\\n\';
            section += \'<div class="ingredient-measurement alignleft">\\n\';
                section += \'<label for="_ingredient_measurement_\' + i + \'">Measurement: </label>\\n\';
                section += \'<input type="text" name="_ingredient_measurement_\' + i + \'" />&nbsp;\\n\';
            section += \'</div>\\n\';
            section += \'<div class="ingredient-name alignleft">\\n\';
                section += \'<label for="_ingredient_name_\' + i + \'">Ingredient: </label>\\n\';
                section += \'<input type="text" name="_ingredient_name_\' + i + \'" />&nbsp;\\n\';
            section += \'</div>\\n\';
            section += \'<div class="clear"></div>\\n\';
            section += \'</div>\\n\';

            sections += section;
        }//end for

        //add the new input sections
        jQuery(\'#ingredients\').html(sections);
        //show the ingredients inputs
        jQuery(\'#ingredients\').show(\'slow\');

        return false;       
    });
但现在我不知道如何正确保存元数据。

下面是我的for循环:

    //loop through all ingredients and update them accordingly
    for($i=1; $i<=$num; $i++):

        $amt = \'_ingredient_amount_\'.$i;
        $meas = \'_ingredient_measurement_\'.$i;
        $name = \'_ingredient_name_\'.$i;

        //set ingredients array for each iteration
        $post_meta[\'_ingredient_amount_\'.$i] = $_POST[\'_ingredient_amount_\'.$i];
        $post_meta["{$meas}"] = $_POST["{$meas}"];
        $post_meta[$name] = $_POST[$name];

        //update meta data
        foreach( $post_meta as $key => $value ):
            if( $value ):
                if( get_post_meta( $post_id, $key, FALSE) ): // If the custom field already has a value
                    update_post_meta( $post_id, $key, $value );        
                else: // If the custom field doesn\'t have a value
                    add_post_meta( $post_id, $key, $value );
                endif;
            else:
                //delete_post_meta( $post_id, $key ); // Delete if blank
            endif;  
        endforeach; 

    endfor;
我知道在获取$\\u POST值的语法中缺少了一些东西。有什么想法吗?

编辑-------------------------------

我没能将$post变量传递到我的函数中——我真傻。现在一切正常。谢谢你的帮助!

1 个回复
最合适的回答,由SO网友:Milo 整理而成

可以使用jQuery克隆现有字段并将其附加到表单中。您还必须处理成分数量少于字段数量的情况,并且必须使用jQueryremove. 下面是一个克隆字段的简单示例:

$(\'#quantity-form\').submit(function(){
    // get # of fields that already exist
    // (change this to match whatever type of fields you have)
    var count = $(\'#metabox-form input[type="text"]\').length;
    // you\'ll want to check if count is > or < requested quantity and possibly remove,
    // or clone (in a loop to add multiple fields):
    $(\'#metabox-form input[type="text"]:last\')
        .clone(false)
        .attr({
            name:\'field-\' + (count + 1),
            id:\'field-\' + (count + 1)
        })
        .appendTo(\'#metabox-form\');

    return false;                   
});

结束

相关推荐

使jQuery库在插件文件之前加载

我正在使用一些jQuery插件,比如validate。但是它们都是在由WordPress和my theme自动加载的Jquery库之前加载的。我需要在之后加载插件,所以有没有办法让Jquery在函数中首先加载。php-以便我可以使用它的前端和管理。我目前正在函数中加载以下内容。phpwp_enqueue_script(\'validation\', get_bloginfo(\'template_url\') .\"/js/jquery.validate.min.js\"); w