У меня есть набор полей чисел, каждый из которых имеет класс "product-quantity" и набор пустых div. числовые поля задаются с помощью data-attr small, medium и до 5xl. Пустой div устанавливается с помощью data-attr small, medium и доходит до 5xl, так как поле небольшого числа связано с маленьким div и тем самым одним.
Когда вы увеличиваете или уменьшаете число внутри поля небольшого числа, div "small" следует вставлять после пустого div с малым attr.
Когда вы увеличиваете или уменьшаете число внутри поля номер носителя, div "medium" следует вставлять после пустого div с помощью среды attr.... и так далее
Кроме того, все вышеперечисленное относится к контейнеру продукта x, и на странице имеется несколько продуктов.
У меня есть этот jsfiddle, который имитирует то, что я пытаюсь сделать:
однако, прямо сейчас, когда я добавляю/вычитаю число в поля небольшого числа, он добавляет/вычитает div как в пустой малый/средний div, так и в оба продукта. и то же самое для среды.
Мне тяжело пытаться связать, какое числовое поле принадлежит пустому div, принадлежащему тому продукту.
HTML:
<div id="product-1">
<div class="size-field">
<div id="size-label">
s
</div>
<div class="number-input">
<input id="Small" class="product-quantity" type="number" name="Small" min="0"
max="9999" data-product-id="1">
</input>
</div>
</div>
<div id="size-label">
m
</div>
<div class="number-input">
<input id="Medium" class="product-quantity" type="number" name="Medium"
min="0" max="9999" data-product-id="1">
</input>
</div>
<div class="name-number-header"><h5>HEADER<h5></div>
<div class="name-number-field-container" data-size="Small">small:
</div>
<div class="name-number-field-container" data-size="Medium">medium:
</div>
</div>
<br clear="all">
<div id="product-2">
<div class="size-field">
<div id="size-label">
s
</div>
<div class="number-input">
<input id="Small" class="product-quantity" type="number" name="Small" min="0"
max="9999" data-product-id="2">
</input>
</div>
</div>
<div id="size-label">
m
</div>
<div class="number-input">
<input id="Medium" class="product-quantity" type="number" name="Medium"
min="0" max="9999" data-product-id="2">
</input>
</div>
<div class="name-number-header"><h5>HEADER<h5></div>
<div class="name-number-field-container" data-size="Small">small:
</div>
<div class="name-number-field-container" data-size="Medium">medium:
</div>
</div>
ЯШ:
$('.product-quantity').on('change',function(){
$('.name-number-field').remove();
var val = $(this).val();
for (var i = 0; i < parseInt(val); i++){
$('<div/>',{'class':'name-number-field'}).insertAfter($("[data-size]"));
}
});
$('.product-quantity').on('change', function () {
var val = $(this).val(),
ele = $(this).closest('[id^="product"]').find('[data-size="'+this.name+'"]');
ele.nextUntil('[data-size]').remove();
for (var i = 0; i < parseInt(val); i++) {
$('<div/>', {
'class': 'name-number-field'
}).insertAfter(ele);
}
});
РЕДАКТИРОВАТЬ:
Основываясь на комментариях, то, что вы действительно пытаетесь сделать, это просто добавить один, если значение увеличивается, и удалить последнее, если значение уменьшится, и для этого подход будет несколько иным:
$('.product-quantity').each(function() {
$(this).data('val', this.value);
}).on('change', function () {
var val = $(this).val(),
old = $(this).data('val'),
ele = $(this).closest('[id^="product"]').find('[data-size="'+this.name+'"]'),
inc = val >= old;
if (inc) {
$('<div/>', {
'class': 'name-number-field'
}).insertAfter(ele);
}else {
$('.name-number-field', ele.parent()).last().remove();
}
$(this).data('val', this.value);
});
Сделайте использование своего data-product-id
и перетащите его в текстовое поле и настройте нужные элементы.
Попробуй это,
$('.product-quantity').on('change',function(){
$('.name-number-field').remove();
var val = $(this).val();
for (var i = 0; i < parseInt(val); i++){
$('<div/>',{'class':'name-number-field'})
.insertAfter($(this).parents('#product-' + $(this).data('product-id')).find("[data-size]"));
}
});
Редактировать:
$('.product-quantity').on('change',function(){
$('.name-number-field').remove();
var val = $(this).val();
for (var i = 0; i < parseInt(val); i++){
$('<div/>',{'class':'name-number-field'})
.insertAfter($(this).parents('#product-' + $(this).data('product-id')).find("[data-size='"+ $(this).attr('name') +"'][data-size]"));
}
});