【问题标题】:adding and removing text field with associated number input values添加和删​​除具有关联数字输入值的文本字段
【发布时间】:2013-12-19 16:16:38
【问题描述】:

我有一组数字输入字段,标记为 small & medium,以及一组带有 small and medium 标签的 div。 当您将数字添加到小数字输入字段时,应在标记为小的 div 之后插入文本输入。当您从小数输入字段中减去一个数字时,应删除最近添加的文本输入字段。文本输入的添加和删除应该是列表中的最后一个。

当您删除一个文本字段时,它应该只删除具有相关大小的文本字段。

现在我的脚本正在新生成的输入的顶部添加文本输入字段(我知道它是这样发生的,因为我的脚本说 insertAfter 标签,所以它总是会在顶部添加一个输入,但是我不想那样)。

现在它正在删除存在的最后一个输入,而不是关联大小的最后一个输入。

Code here

当你填写输入时,更容易看到我在说什么(a、b、c 在添加它们之后查看哪个被删除以及它们被添加到哪里)。

这对我来说用语言解释起来很复杂,但是当你看小提琴时,它可能会变得更清楚。如果您需要我解释其他内容,请询问。

脚本:

$('.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) {
                $('<input/>', {'class': 'name-number-field'} ).insertAfter(ele);
            }else {
                $('.name-number-field', ele.parent()).first().remove();
            }

            $(this).data('val', this.value);
        });

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    可能是这样的

    $('.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) {
            $('<input/>', {
                'class': 'name-number-field'
            }).insertAfter(ele.nextUntil('div').last().length ? ele.nextUntil('div').last() : ele);
        } else {
            ele.nextUntil('div').last().remove();
        }
    
        $(this).data('val', this.value);
    });
    

    FIDDLE

    【讨论】:

    • 你的小提琴很棒!我现在将尝试将其实施到我的项目中。看看我想出什么。谢谢
    • 在我的项目中,我将新创建的 input:class:name-number-field 更改为 div:class:name-number-field。当我尝试在 if (inc) 中将 更改为
      时,它会破坏删除。是什么告诉 remove 它是一个输入?
    • 它使用 nextUntil('div') 来获取所有不是 DIV 的下一个元素,所以当使用 DIV 时,没有什么可以知道插入或不插入的元素,因为它们都是 DIV 的跨度>
    • 哦,好的,我明白了。除了 div 或 input 之外,我还可以使用其他元素/容器吗?因为您看到我将其更改为 div,以便我可以在 div 中插入 html,然后添加和删除其中插入 html 的 div。我通过创建一个变量来做到这一点: input = $('
      ', {'class': 'name-number-field', 'type': 'text'}).html('​ ') 然后我这样做了: if (inc) { $(input).insertAfter
    • @anmaree - 当然,我们可以使用 name-number-field 类,就像这样 -> jsfiddle.net/7PhJZ/45
    猜你喜欢
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-15
    相关资源
    最近更新 更多