У меня есть формуляр, к которому я добавляю поля, которые зависят от многообразного select, и во время добавления стоимости к этим новым произведенным полям я нуждаюсь в том, чтобы строить один json
что является стоимостью скрытого поля, которое является тем, которого я стремлюсь к тому, чтобы послать в базу данных.
Результат вышеупомянутого скрытого поля я это произвожу в каждом событии focus
и blur
в полях текста, с которых я подбираю его стоимость.
Частично оно функционирует, но последует за следующим:
focus
-> я проверяю, существует ли настоящая стоимость в списке, тогда это удаляюblur
-> я добавляю стоимость к спискуЕсли это происходит два раза в том же поле, действительно шаг 1
оно функционирует, но 2
он добавляет мне обе стоимость к списку снова, бывший и новый. Уже я провожу один день в этом и продолжаю ходить и не нахожу раствор.
Это код, который у меня есть:
data = []
result = []
parents = ["0"]
$(document).on('blur', '.adviser-percent', function(){
item = $(this)
adviserID = item.attr('data-adviser-id')
percent = item.val()
parent = item.parents('.access-level')
level = parent.attr('data-level-number')
field = parent.find('.level-number-id')
if (parents[0] != level){
parents.fill(parent.attr('data-level-number'))
data = []
}
result = [ level ]
pair = [ adviserID, percent ]
data.push(pair)
// https://stackoverflow.com/questions/20997127/how-to-find-the-duplicates-in-a-javascript-multidimensional-array#answer-20997744
noDupes = data
.map(function (item) {
return JSON.stringify(item);
})
.reduce(function (out, current) {
if (out.indexOf(current) === -1) out.push(current);
return out;
}, [])
.map(function (item) {
return JSON.parse(item);
});
result.push(noDupes)
field.val(JSON.stringify(result))
})
$(document).on('focus', '.adviser-percent', function(){
item = $(this)
adviserID = item.attr('data-adviser-id')
percent = item.val()
parent = item.parents('.access-level')
level = parent.attr('data-level-number')
field = parent.find('.level-number-id')
fieldVal = field.val()
array = ( result[1] == null ) ? [] : result[1]
output = [ level ]
pair = [ adviserID, percent ]
var filtered = array.filter(function(value, index, arr){
return JSON.stringify(value) !== JSON.stringify(pair)
})
output.push(filtered)
field.val(JSON.stringify(output))
})
Я присоединяю образ для того, чтобы имелась идея более ясная, чем оно происходит
Я издаю:
Я не могу использовать раствор, тип посылает неудар в лунку с именем, упорядочиваю, потому что это не единственная игра inputs, так как я имею n
уровни, которые сам пользователь добавляет, и внутри каждого уровня есть советники, которые пользователь добавляет также, и поля производятся dinámicamente с jquery. Как я говорю каждому советнику на каком уровне он принадлежит?
nivel 1
asesor 1, 5%
asesor 2, 10%
nivel 2
asesor 1, 7%
asesor 2, 15%
asesor n, 30%
nivel 3
...
Спасибо заранее
Решенная проблема, между другими вещами, была переменной data
, которая давала проблемы, так как в каждых focus
, blur
добавляли под себя повторенную стоимость. Тогда solucionГі в событии focus
igualГЎndola он у filtered
data = filtered
В конце концов cГіdigo остался следующего способа:
data = []
result = []
parents = ["0"]
$(document).on('focus', '.adviser-percent', function(){
item = $(this)
adviserID = item.attr('data-adviser-id')
percent = item.val()
parent = item.parents('.access-level')
level = parent.attr('data-level-number')
field = parent.find('.level-data')
fieldVal = field.val()
if ( fieldVal !== '' ){
array = JSON.parse(fieldVal)[1]
} else if ( result[1] == null ){
array = []
} else {
array = result[1]
}
output = [ level ]
pair = [ adviserID, percent ]
var filtered = array.filter(function(value, index, arr){
return JSON.stringify(value) !== JSON.stringify(pair)
})
output.push(filtered)
var newData = data.filter(function(value, index, arr){
return JSON.stringify(value) !== JSON.stringify(pair)
})
data = filtered //