【问题标题】:how to add close button in Appended Items?如何在附加项目中添加关闭按钮?
【发布时间】:2021-12-01 22:40:06
【问题描述】:

我在一个项目中使用 Localstorage 功能和克隆,它工作正常

但是问题是如何在 .count 类中添加数字增量,就像我点击 save1 save2 save3 然后显示的总数像 <div class='count'>3</div>

这是我的代码的演示JsFiddle Demo

下面是我的代码,我尝试在其中添加 .count 系统以及所有附加元素,但我无法添加

$('.item-all .item-save').click(function() {
  $(this).toggleClass('productad')
  window.localStorage.setItem('test' + this.dataset.id, $(this).hasClass('productad'));
});
$('.item-all .item-save').each(function() {
  var id = 'test' + this.dataset.id;
  if (localStorage.getItem(id) && localStorage.getItem(id) == "true") {
    $(this).addClass('productad');
    $(this).clone().appendTo('.item-append');
  }
});
$(".item-all .item-save").click(function() {
  var existing = $(".item-append [data-id=" + $(this).data("id") + "]");
  if (existing.length > 0)
    existing.remove();
  else
    $(this).clone().appendTo('.item-append');
});
$(".close").click(function() {
localStorage.removeItem("'test' + this.dataset.id"), $(this).removeClass('productad');
  
});
.item-save {
    position: relative;
    display: block;
    font-size: 14px;
    width:80px;
    margin: 5px;
    padding: 5px;
    background: #a5a5a5;
    text-align: center;
    cursor: pointer;
}
.item-all{display:flex}
.productad{background:red;color:#eee}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class='item-all'>
<div class='item-save' data-id='123'>
Save1
</div>
<div class='item-save' data-id='124'>
Save2
</div>
<div class='item-save' data-id='125'>
Save3
</div>
<div class='item-save' data-id='126'>
save4
</div>
</div>
<hr/>
<div class='item-append'>
<div class='count'>3</div>
</div>
关闭按钮看起来像这样我需要

非常感谢任何帮助或建议

【问题讨论】:

    标签: javascript jquery function onclick append


    【解决方案1】:

    如果你检查你可以创建一个函数并在那里创建一个 div 元素并附加克隆的项目并附加一个从代码创建的关闭按钮,那么你可以重用该函数从任何方法创建元素,你只需要传递选中的对象,在“close”方法中,你可以使用函数“parent”来选择“div”父元素并从那里获取属性id,如下面的代码。

    function createItem(item){
        var elemId = item.data("id");
        var clonedItem = item.clone();
        var newItem = $(`<div data-id="${elemId}"></div>`);
        newItem.append(clonedItem);
        newItem.append(`<button class='close'>Close</button>`)
        newItem.appendTo('.item-append');
    }
    
    function countSaveItems(){
        $('.count').html($(".item-append div.item-save[data-id]").length);
    }
    
    
    $('.item-all .item-save').click(function() {
      $(this).toggleClass('productad')
      window.localStorage.setItem('test_' + this.dataset.id, $(this).hasClass('productad'));
    });
    $('.item-all .item-save').each(function() {
      var id = 'test_' + $(this).data("id"); //
      if (localStorage.getItem(id) && localStorage.getItem(id) == "true") {
        $(this).addClass('productad');
        createItem($(this));
        countSaveItems();
      }
    });
    $(".item-all .item-save").click(function() {
      var elemId = $(this).data("id");
      var existing = $(`.item-append div[data-id="${elemId}"]`);
      if (existing.length > 0){
        existing.remove();
      }else{
        createItem($(this));
      }
      countSaveItems();
    });
    
    $(".item-append").on("click", ".close", function() {
        var id = $(this).parent().data("id");
        localStorage.removeItem(`test_${id}`);
      $(`.item-save[data-id='${id}']`).removeClass('productad');
        $(this).parent().remove();
      countSaveItems();
      
    } );
    .item-save {
        position: relative;
        display: block;
        font-size: 14px;
        width:80px;
        margin: 5px;
        padding: 5px;
        background: #a5a5a5;
        text-align: center;
        cursor: pointer;
    }
    .item-all{display:flex}
    .productad{background:red;color:#eee}
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <div class='item-all'>
    <div class='item-save' data-id='123'>
    Save1
    </div>
    <div class='item-save' data-id='124'>
    Save2
    </div>
    <div class='item-save' data-id='125'>
    Save3
    </div>
    <div class='item-save' data-id='126'>
    save4
    </div>
    </div>
    <hr/>
    <div class='item-append'>
    </div>

    【讨论】:

    • 感谢您抽出宝贵时间回答,但问题是关闭按钮不起作用我在 jsFiddle 中更新您的代码请检查Js Fiddle Demo 我希望这会解决我不知道为什么关闭按钮不起作用跨度>
    • 哦,抱歉,在这种情况下,我们需要使用关闭选择器来通过选择现有元素来触发事件,我更新了答案,现在检查并告诉我
    • 抱歉,当我点击关闭按钮时它不起作用,但当我刷新浏览器时,它不会从本地存储中关闭,关闭按钮再次出现
    • 我注释了本地存储代码,但是为什么要存储在本地存储中
    • 请检查 jsFiddle localsotrage 关闭按钮不起作用?它的项目我需要存储在 locastorage 请帮我解决问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-25
    • 2013-02-25
    • 1970-01-01
    • 2013-05-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多