添加新输入后重复多次链接添加和删除。为什么?

时间:2011-08-10 20:33:10

标签: javascript jquery

为什么每次addremove new input链接removeadd重复几次后呢? 例如:removeremoveremoveremoveaddaddaddaddaddaddadd...

示例(添加输入并查看):http://jsfiddle.net/zgWr3/6/

$(function () {
    $('a.add_input').live('click', function (event) {
        event.preventDefault();
        var $class = '.' + $(this).closest('div.find_input').find('div').attr('class');
        var newDiv = $(this).closest($class).clone();
        $(this).closest($class).find('.add_input').remove()
        //$(this).find('.adda').remove()
        newDiv.find('.adda .mediumCell').append('<a href="" class="remove_input">remove</a>')
        newDiv.find('input').each(function () {
            $(this).prop('checked', false).val('');
        });
        $($class + ':last').after(newDiv);
        //newDiv.remove('.adda')
        //alert(newDiv)
    });

    $('a.remove_input').live('click', function (event) {
        event.preventDefault();
        var $class = '.' + $(this).closest('div.find_input').find('div').attr('class');
        $(this).closest($class).prev().find('.adda .mediumCell').append('<a href="" class="add_input">add</a>')
        $(this).closest($class).remove();
    });
});

2 个答案:

答案 0 :(得分:1)

你正在克隆div,其中包含链接,然后添加另一个。

编辑:你克隆div然后添加它,并附加一个remove_link(和删除中的add_link类似)。第一次没有链接,它的工作原理。当您调用clone()时链接存在第二次,因此您添加了一个副本。第3次存在2个链接,然后添加另一个链接。等等。

最好在函数之外构建字段的整个HTML,例如:

var divHTML = \'
  <div class="field">\
    <input type="text"/>\
    <a class="remove_link">Remove</a>\
  </div>';

...然后简单地在你的函数中添加$(divHTML),而不是你现在拥有的这个复杂的克隆/追加/操作函数。无论如何,可能有一种更简单,更直接的方法。

编辑2:像这样的东西

var divHTML = '\
  <div class="mediumCell">\
    <input type="text" name="price" placeholder="hello" title="تعرفه"\
     class="numeric" style="width: 70px;">\
    <a class="remove_input" href="#">remove</a>\
  </div>';

$('a.add_input').live('click', function (event) {
   event.preventDefault();
   $(divHTML).insertBefore($(this));      
});

$('a.remove_input').live('click', function (event) {
   event.preventDefault();
   $(this).closest('.mediumCell').remove();
});

编辑3:

好吧,你总是可以使用原来的add函数,只是在那里抛出一个not()过滤器,所以链接只会添加到第一个克隆上:

newDiv.find('.adda .mediumCell').not(':has(.remove_input)').append('<a href="" class="remove_input">remove</a>')

答案 1 :(得分:0)

每次从此代码点击“添加”链接时,您都会添加一个新的“删除”链接:

newDiv.find('.adda .mediumCell').append('<a href="" class="remove_input">remove</a>')

评论它可以正常工作,但是根本没有任何“删除”链接。我建议在现场活动之外添加“删除”链接,并在需要时对其进行操作。