0

通过使用相对引用,我可以删除已添加到表单特定部分列表中的项目。例如,通过添加需求,可以将其从需求中删除。

我的问题有两个:

  1. 将项目添加到参考文献会将其添加到所有三个类别
  2. 当我尝试向其他部分(资格)添加值时,它说我的输入是空白的。

http://jsfiddle.net/spadez/9sX6X/60/

var container = $('.copies'),
    value_src = $('#current'),
    maxFields = 10,
    currentFields = 1;

$('.form').on('click', '.add', function () {
      value_src.focus();
    if ($.trim(value_src.val()) != '') {
        if (currentFields < maxFields) {
            var value = value_src.val();
            var html = '<div class="line">' +
                '<input id="accepted" type="text" value="' + value + '" />' +
                '<input type="button" value="X" class="remove" />' +
                '</div>';

            $(html).appendTo(container);
            value_src.val('');
            currentFields++;
        } else {
            alert("You tried to add a field when there are already " + maxFields);
        }
    } else {
        alert("You didn't enter anything");
    }

})
    .on('click', '.remove', function () {
        value_src.focus();
    $(this).parents('.line').remove();
    currentFields--;
});

是否可以通过使用相对引用(例如“父级”)来修改此代码而不为每个部分重复它。我想对所有三个部分使用相同的脚本,但拥有它,因此每个列表都是独立的。

我是 javascript 新手,所以我想知道这是否可能,因为我只设法让它在删除时工作。

4

2 回答 2

1

我建议div为每个部分添加一个包装。

<div class="section">
    <h4>Requirements</h4>
    <div class="copies"></div>
    <div class="line">
        <input id="current" type="text" name="content" placeholder="Requirement" />
        <input type="button" value="Add" class="add" />
    </div>
</div>

然后你可以这样做:

var $section = $(this).closest(".section");

$(html).appendTo($section.find(".copies"));

这将只添加到相关.copies元素,而不是.copies像您现在的代码那样添加到所有元素。类似的方法也可以用于所有其他元素。

于 2013-06-19T15:26:20.980 回答
1

您必须使用this来获取当前元素。在你的情况下this是指被点击的按钮。
下一步是获取属于该按钮的输入框。例如$(this).prev();在这个例子中:

$('.form').on('click', '.add', function () {
   var value_src = $(this).prev();

http://jsfiddle.net/9sX6X/62/

您的附加部分也是如此。您正在将您的 html 附加到匹配的所有三个元素中$('.copies')。相反,您必须尝试从this.

$('.form').on('click', '.add', function () {
   var value_src = $(this).prev();
   var copies = $(this).parent().prev();

http://jsfiddle.net/9sX6X/63/

于 2013-06-19T15:26:44.280 回答