From de3829580800dbd185a43b2d5b8b9e241fef49da Mon Sep 17 00:00:00 2001 From: Kamran Ata Date: Tue, 12 Nov 2019 11:23:41 +0400 Subject: [PATCH 1/2] Allow multidimensial names in form elements --- jquery.repeater.js | 15 ++++++++------- src/repeater.js | 15 ++++++++------- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/jquery.repeater.js b/jquery.repeater.js index 1678b1f..4073b21 100644 --- a/jquery.repeater.js +++ b/jquery.repeater.js @@ -875,16 +875,17 @@ $.fn.repeater = function (fig) { .each(function () { var $input = $(this); // match non empty brackets (ex: "[foo]") - var matches = $input.attr('name').match(/\[[^\]]+\]/g); + var matches = $input.attr('name').match(/[^\]\[]+/g); - var name = matches ? - // strip "[" and "]" characters - last(matches).replace(/\[|\]/g, '') : - $input.attr('name'); + var newName = groupName + '[' + index + ']' + for (var i = 0; i < matches.length; i++) { + newName += '[' + matches[i] + ']'; + } - var newName = groupName + '[' + index + '][' + name + ']' + - ($input.is(':checkbox') || $input.attr('multiple') ? '[]' : ''); + if ($input.is(':checkbox') || $input.attr('multiple')) { + newName += '[]'; + } $input.attr('name', newName); diff --git a/src/repeater.js b/src/repeater.js index 6cdc3cc..a3c5307 100644 --- a/src/repeater.js +++ b/src/repeater.js @@ -150,16 +150,17 @@ $.fn.repeater = function (fig) { .each(function () { var $input = $(this); // match non empty brackets (ex: "[foo]") - var matches = $input.attr('name').match(/\[[^\]]+\]/g); + var matches = $input.attr('name').match(/[^\]\[]+/g); - var name = matches ? - // strip "[" and "]" characters - last(matches).replace(/\[|\]/g, '') : - $input.attr('name'); + var newName = groupName + '[' + index + ']' + for (var i = 0; i < matches.length; i++) { + newName += '[' + matches[i] + ']'; + } - var newName = groupName + '[' + index + '][' + name + ']' + - ($input.is(':checkbox') || $input.attr('multiple') ? '[]' : ''); + if ($input.is(':checkbox') || $input.attr('multiple')) { + newName += '[]'; + } $input.attr('name', newName); From e15cf7990678e1ad9281a221f094a6fca8fd68cd Mon Sep 17 00:00:00 2001 From: Kamran Ata Date: Tue, 12 Nov 2019 12:06:01 +0400 Subject: [PATCH 2/2] Fixing inner repeater naming --- jquery.repeater.js | 11 +++++++++-- src/repeater.js | 11 +++++++++-- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/jquery.repeater.js b/jquery.repeater.js index 4073b21..920ddf6 100644 --- a/jquery.repeater.js +++ b/jquery.repeater.js @@ -874,8 +874,15 @@ $.fn.repeater = function (fig) { $filterNested($item.find('[name]'), repeaters) .each(function () { var $input = $(this); - // match non empty brackets (ex: "[foo]") - var matches = $input.attr('name').match(/[^\]\[]+/g); + + if (!$input.attr('data-oldName')) { + var oldName = $input.attr('name'); + $input.attr('data-oldName', oldName); + } else { + var oldName = $input.attr('data-oldName'); + } + + var matches = oldName.match(/[^\]\[]+/g); var newName = groupName + '[' + index + ']' diff --git a/src/repeater.js b/src/repeater.js index a3c5307..61d56ed 100644 --- a/src/repeater.js +++ b/src/repeater.js @@ -149,8 +149,15 @@ $.fn.repeater = function (fig) { $filterNested($item.find('[name]'), repeaters) .each(function () { var $input = $(this); - // match non empty brackets (ex: "[foo]") - var matches = $input.attr('name').match(/[^\]\[]+/g); + + if (!$input.attr('data-oldName')) { + var oldName = $input.attr('name'); + $input.attr('data-oldName', oldName); + } else { + var oldName = $input.attr('data-oldName'); + } + + var matches = oldName.match(/[^\]\[]+/g); var newName = groupName + '[' + index + ']'