【问题标题】:Insert Form Input values into array AND retain custom Key indexes将表单输入值插入数组并保留自定义键索引
【发布时间】:2011-01-19 09:02:36
【问题描述】:

我正在处理一个包含如下元素的表单:

<form id="post">
   <div id="related_posts">
        <input type="hidden" class='related' name="reladded[72]" value="12" />
        <input type="hidden" class='related' name="reladded[34]" value="21" />
        <input type="hidden" class='related' name="reladded[46]" value="33" />
   <div>
</form>

当我使用标准表单流程提交时,我得到一个数组,如下所示:

array('72'=> '12,'34'=> '21,'46'=> '33')

然后我将其序列化并保存到数据库中。

如何使用 JQuery 从这些字段中收集相同的元素并将它们转换为序列化数组,以便我可以通过 AJAX POST 提交?

我已经涵盖了所有 AJAX 代码,但我还不能迭代元素以收集正确的数组值。 表单中还有其他元素,但这些是我要提交的唯一元素。

我尝试了以下方法,但无济于事:

var serialrel = $('#post input:hidden[name="reladded"]').serialize();

请帮忙!

【问题讨论】:

    标签: arrays forms jquery


    【解决方案1】:

    您可以在表单元素上使用.serialize()

    $("#post").serialize();
    

    【讨论】:

    • .serializeArray() 可能更适合他。
    • 谢谢,但表单包含许多我不想提交的其他字段,据我所知,它不会保留我的自定义索引。您的建议在这种情况下不起作用。
    【解决方案2】:

    这是我想出的,按照上面的方式获取格式化数组:

    reladded = new Array();
    jQuery("#related-posts").find('input.related').each(function() {
        jQuery.each(this.attributes, function(i, attrib){
         var name = attrib.name;
         var value = attrib.value;
         if( name=='name' ){
             arrayNameAndKey = value; //get 'reladded[*]' (key for array)    
        }
         if( name=='value' ){
            arrayValue = value; //get input value
         }
        });
        //add entry to 'reladded' array from name attr. and input values
        eval(arrayNameAndKey +"='"+arrayValue+"'");
    }); 
    

    通过 AJAX 提交数组后,我必须删除所有 javascript 添加的“未定义”数组值。这是我用于此的代码:

    <?php
        $related = $_POST['reladded'];
        //clean javascript crud
        if(is_array($related)){
                foreach($related as $key=>$value){
            if($value=="undefined")
            unset($related[$key]);
        }
    ?>
    

    绝对愿意接受更优雅的方式来做到这一点......

    注意 - 我实际上不需要在 JQuery 中序列化数组,因为我只是通过 AJAX 将它传递给 PHP。我在那里做了序列化。

    我的主要目标是在检索到的数组中保留自定义键索引 - 这就是我想要的关于如何更轻松地做的建议,如果可能的话......谢谢!!!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-02
      • 2012-09-28
      • 2021-01-04
      • 1970-01-01
      • 2011-12-07
      • 1970-01-01
      • 2015-09-18
      • 2021-09-14
      相关资源
      最近更新 更多