$ _POST使用Jquery而不是修改后的名称

时间:2017-05-31 09:52:19

标签: jquery ajax octobercms

我在几个步骤中使用jquery.repeater来管理10月Ajax框架。

转发器必须动态更改输入名称,例如my_input_textmy_group[1]my_input_textmy_group[2]my_input_text

当我在浏览器中使用F12时,我可以看到输入名称已根据需要正确更改

...
<input class="form_input" type="text" name="group[1][amount]">
<span class="error_message" data-validate-for="group[1][amount]"></span>    
...

但在我的ajax处理程序onSomething()中,$ _POST仍会返回原始输入字段名称my_input_text,因此我无法正确管理ajax错误,并返回data-validate-for

array:3 [
  "group" => array:2 [
    0 => array:1 [
      "amount" => ""
    ]
    1 => array:1 [
      "amount" => "666"
    ]
  ]
]

预期结果是

array:3 [
  "group" => array:2 [
    0 => array:1 [
      "amount" => ""
    ]
    1 => array:1 [
      "group[1][amount]" => "666"
    ]
  ]
]

(第一个数组元素是预期的,因为它对应于用作转发器的空表格&#34;模板&#34;使用diplay:none)

这里是改变输入名称属性的jquery代码(我的hack改变data-validate-for

    var setIndexes = function ($items, groupName, repeaters) {

        $items.each(function (index) {

            var $item = $(this);

            $item.data('item-name', groupName + '[' + index + ']');
            $filterNested($item.find('[name]'), repeaters)
            .each(function () {

                var $input = $(this);

                // match non empty brackets (ex: "[foo]")
                var matches = $input.attr('name').match(/\[[^\]]+\]/g);

                var name = matches ?
                    // strip "[" and "]" characters
                    last(matches).replace(/\[|\]/g, '') :
                    $input.attr('name');

                var newName = groupName + '[' + index + '][' + name + ']' +
                    ($input.is(':checkbox') || $input.attr('multiple') ? '[]' : '');

                $input.attr('name', newName);

                $foreachRepeaterInItem(repeaters, $item, function (nestedFig) {
                    var $repeater = $(this);
                    setIndexes(
                        $filterNested($repeater.find('[data-repeater-item]'), nestedFig.repeaters || []),
                        groupName + '[' + index + ']' +
                                    '[' + $repeater.find('[data-repeater-list]').first().data('repeater-list') + ']',
                        nestedFig.repeaters
                    );
                });
            });

            //***** add by Pat-Och
            if (fig.errorMessage) {

                $filterNested($item.find('.' + fig.errorMessageClass), repeaters)
                    .each(function () {

                        var $span = $(this);

                        // match non empty brackets (ex: "[foo]")
                        var matches = $span.attr('data-validate-for').match(/\[[^\]]+\]/g);

                        var dataValidateFor = matches ?
                            // strip "[" and "]" characters
                            last(matches).replace(/\[|\]/g, '') :
                            $span.attr('data-validate-for');                        

                        var newDataValidateFor = groupName + '[' + index + '][' + dataValidateFor + ']' +
                            ($span.is(':checkbox') || $span.attr('multiple') ? '[]' : '');                        

                        $span.attr('data-validate-for', newDataValidateFor);

                    });
            }
            //***** end add by Pat-och
        });

        $list.find('input[name][checked]')
            .removeAttr('checked')
            .prop('checked', true);
    };

问题是提交表单没有检索到正确的新输入名称而是原始的。第一,转发器库按照用户要求的时间克隆模板,然后更改输入名称,然后在提交后,ajax处理程序看到正确模板克隆但具有原始输入名称

如果运行此

$( "form" ).submit(function( event ) {
  event.preventDefault();
  console.log( $( this ).serialize() );
  console.log($('form').html());

});

序列化表格具有原始价值且.html具有期望值,在丛林中丢失......

不知道旁边发生了什么以及如何处理这个问题

0 个答案:

没有答案