【问题标题】:Hide or delete single instance of repeated element when button is pressed按下按钮时隐藏或删除重复元素的单个实例
【发布时间】:2016-04-26 14:24:28
【问题描述】:

当单击带有“关闭”类的按钮时,如何删除/隐藏单个“bakant”元素?使用以下 jsfiddle 生成元素:https://jsfiddle.net/L4f7pjau/

<div class="shape" id="plan4_shape">
    <span class="bakkant"><input class="measures" id="plan4_width" placeholder="mm"/><span class="times"> &times;</span> <input class="measures" id="plan4_width" placeholder="mm"/></span>
    <span class="bakkant" id="bakkant"><input class="measures" id="plan4_width" placeholder="mm"/><span class="times"> &times;</span> <input class="measures" id="plan4_width" placeholder="mm"/><button class="close" value="close1">&times;</button></span>
    <button name="add_row" class="addrow" id="addrow4" onClick="addrow()">Add row</button>
</div>

【问题讨论】:

  • 具有相同 id 的多个元素/输入是一个坏主意。你应该为每个类使用多个类。
  • 我感觉有人在这里开怀大笑。两个不完整的答案,不能解决你一半的问题,都被赞成了。一定会喜欢这个网站:)

标签: jquery html show-hide


【解决方案1】:

简答(针对注意力不集中的人):

// Listen for bubbled click events, coming from delete buttons
$('.shape').on('click', '.close', function() {

  // Remove the row closest to the delete button pressed
  $(this).closest('.bakkant').remove();
});

现在是完整的答案:

现有代码存在多个问题,因此我想通过一些建议和工作演示来指导您:

  • 能够删除您克隆的项目是第一个问题。如果您删除它,您将无法再添加任何记录。我建议您改为使用未存储在列表中的模板项。我使用一个未知类型的虚拟 script 块来保存模板的 HTML。非常容易维护。

  • 同样delete需要对动态添加的item进行操作,所以需要一个委托事件处理器,连接到一个不变的祖先元素。我将它连接到.shape,因为它是所有记录的共同祖先。

  • plan4_width 的 ID 也有重复,页面中不能有这些 ID。将它们改为一个类。

jQuery 代码(已注释):

$(function() {
  // Your count of added IDs
  var i = 0;

  // Add button handler
  $('#addrow4').click(function() {

    // Get the template HTML and convert to an element
    var $clone = $($('#template').html());

    // Set the id of the new entry (assuming it needs an ID)
    $clone.attr('id', "bakkant" + ++i);

    // Add the new row to the start of the container
    $('.shape').prepend($clone);
  });

  // Listen for bubbled click events, coming from delete buttons
  $('.shape').on('click', '.close', function() {

    // Remove the row
    $(this).closest('.bakkant').remove();
  });

});

完整工作解决方案:https://jsfiddle.net/y52ttwfv/4/

注意事项:

  • 您还为每行的两个字段指定了width。应该是height 吗?

【讨论】:

  • 亲爱的匿名投票者:我认为您喜欢这样做,以作为某种形式的笑话。坏消息,所以可以跟踪它,你会[现在已经]被报道:)
  • 您好,感谢您的回答。 :) 关于宽度问题,一个是宽度,一个是高度。
  • @ChriChri:更新了 JSFiddle 以在输入中包含单独的 heightwidth 类。显然,您需要更改一些内容以适应您的服务器要求(命名等)。这只是为了解释我推荐的各种修复。
【解决方案2】:

$(this).parent() 将识别父跨度。

如果您要进一步嵌套按钮元素,请尝试$(this).closest('.bakknat')

然后根据情况使用.remove().hide()。如果您要提交表单并动态解析输入,您可能需要使用 remove。

$(this).parent().remove();

这是另一个主题 .parent().remove() issue

【讨论】:

  • 好的,现在您需要添加请求的删除处理程序:“当单击具有类 'close' 的按钮时,如何删除/隐藏单个 'bakant' 元素?”。注意:按钮是动态添加的
  • 我认为这是基于小提琴和他的其他知识的问题的基础,但我想你是对的。
  • 是的,这是唯一被问到的问题(尽管在尝试修复第一个问题后,现有代码至少有 4 个问题需要处理)。
  • 因为我已经完成了整个问题,请帮我一个忙,至少将您的答案放在 JSFiddle 中。然后你会看到你还缺少什么:)
【解决方案3】:

我建议您将两者(bakkant 和 a 按钮)包装在同一个 div、span 或您喜欢的任何内容中。

然后你可以找到a按钮的父级并隐藏它,这样隐藏带有按钮的div和bakkand。

您可以使用 .parent() 查找 div (jQuery API - parent())

和 .hide() 隐藏 div。

【讨论】:

  • offsetParent() 用于查找“定位的最近的祖先元素”(例如absoluterelative)。这不是他们想在这里使用的。
  • 是的,你说得对,我对 .parent() 感到困惑。谢谢。
  • 好的,现在您需要添加请求的删除处理程序:“当单击具有类 'close' 的按钮时,如何删除/隐藏单个 'bakant' 元素?”。注意:按钮是动态添加的
  • 他在问如何隐藏或删除...我想这是因为他不想要这个元素,无论如何。所以这个问题只能用 hide 或 remove 来回答。
  • 它们是动态添加的元素,因此不仅仅是简单的隐藏/删除。也许如果你做了一个 jsfiddle 来演示?
猜你喜欢
  • 1970-01-01
  • 2021-08-02
  • 2011-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多