我在几个步骤中使用jquery.repeater来管理10月Ajax框架。
转发器必须动态更改输入名称,例如my_input_text
到my_group[1]my_input_text
,my_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具有期望值,在丛林中丢失......
不知道旁边发生了什么以及如何处理这个问题