jQuery:删除复选框后如何回调/恢复

时间:2015-11-10 20:16:16

标签: javascript jquery html checkbox

这是我的HTML代码:

<div class="foo">
 <label class="checkbox-wrapper">
       One<input type="checkbox" value="1" />
 </label>
 <label class="checkbox-wrapper">
       Two<input type="checkbox" value="1" />
 </label>
 <label class="checkbox-wrapper">
       Three<input type="checkbox" value="1" />
 </label>
 <label class="checkbox-wrapper">
       Four<input type="checkbox" value="1" />
 </label>
</div>    

<button class="btn btn-default btn-block slight" id="allFinished">Remove checked</button>
<button class="btn btn-default btn-block slight" id="show">Show</button>

这是我的jQuery代码:

$(document).ready(function(){
  $('#allFinished').on("click", function(){
      $(".checkbox-wrapper").each(function(){           
          if($(this).find("input[type=checkbox]").prop("checked")){ $(this).remove(); } 
      });
  });

  $('#show').on("click", function(){
      //I don't know what must I fill this
  });
});

我知道如何在检查后单击按钮删除复选框。但我不知道如何恢复它?任何人都可以帮助我 这个演示来自小提琴DEMO FIDDLE

5 个答案:

答案 0 :(得分:2)

根据您的上一条评论:"un-check them and don't show it. When click button show it will be shown all again",此解决方案可以解决问题:

$(document).ready(function(){
  $('#allFinished').on("click", function(){
      $('.checkbox-wrapper input[type="checkbox"]:checked').prop('checked', false).parent().hide();
  });

  $('#show').on("click", function(){
      $('.checkbox-wrapper:hidden').show();
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="foo">
 <label class="checkbox-wrapper">
       One<input type="checkbox" value="1" />
 </label>
 <label class="checkbox-wrapper">
       Two<input type="checkbox" value="1" />
 </label>
 <label class="checkbox-wrapper">
       Three<input type="checkbox" value="1" />
 </label>
 <label class="checkbox-wrapper">
       Four<input type="checkbox" value="1" />
 </label>
</div>    

<button class="btn btn-default btn-block slight" id="allFinished">Remove checked</button>
<button class="btn btn-default btn-block slight" id="show">Show</button>

上述解决方案很简单,但我认为它可以满足您的需求。

答案 1 :(得分:1)

您无法恢复已删除的节点。因此,您可以在触发删除操作时隐藏它,或者将节点复杂性保存在克隆变量中,稍后使用appendChild或设置html内容等方法将其注入。

答案 2 :(得分:1)

尝试使用.filter().find().add()Array.prototype.sort()将元素重置为原始索引,并附加到父元素

$(document).ready(function () {
  var clone;
  $('#allFinished').on("click", function () {
      var checked = $('.checkbox-wrapper').filter(":has(:checked)")
                    .find(":checked").prop("checked", false).parent().remove();
      // if elements already removed , add current removed element to `clone` stack
      if (clone) {
        clone = clone.add(checked)
      // else set `clone` to initial element removed
      } else {
        clone = checked
      }        
    });

    $('#show').on("click", function () {
        if (clone) {
          var elems = $(".foo label").add(clone)
          .toArray()
          .sort(function(a, b) {
            return $("input", a)[0].name < $("input",b)[0].name ? 0 : 1 
          });
          $(".foo").html(elems);
          // set `clone` to `undefined`
          clone = void 0;
        } else {
           console.log("no checked inputs removed")
        }
    });
});

jsfiddle https://jsfiddle.net/3askfpam/9/

答案 3 :(得分:0)

Here使用.show()和.hide()的工作解决方案。

$(".checkbox-wrapper").each(function(){
  if($(this).find("input[type=checkbox]").prop("checked")){                         
     $(this).show(); 
  } 
});

答案 4 :(得分:-1)

您应该隐藏和禁用您的复选框,这样您的服务器端脚本就不会“获取”该值。至少在php中它不会