jQuery中如何删除已选中的复选框

4
我正在尝试使用jQuery删除选中的复选框,但当我想要获取复选框的状态时,出现错误消息。 这里是jsfiddle链接
    <div class="control-group">

<label class="checkbox"><input value="0" type="checkbox">Message 0</label>
<label class="checkbox"><input value="1" type="checkbox">Message 1</label>
<label class="checkbox"><input value="2" type="checkbox">Message 2</label>
<label class="checkbox"><input value="3" type="checkbox">Message 3</label>
<label class="checkbox"><input value="4" type="checkbox">Message 4</label>
<label class="checkbox"><input value="5" type="checkbox">Message 5</label>
<label class="checkbox"><input value="6" type="checkbox">Message 6</label>
<label class="checkbox"><input value="7" type="checkbox">Message 7</label>
<label class="checkbox"><input value="8" type="checkbox">Message 8</label>

</div> 


 <button class="btn" type="button" id="deleteAcc">Delete</button>

我的jQuery代码是:

$("#deleteAcc").on("click",function(){      
    $(".control-group label.checkbox").each(function(){
        if (this.children(":first").is(':checked')) {
            this.remove();
        }
    }); 
});

你可以使用 if (this.children[0].checked) this.parentNode.removeChild(this) - RobG
4个回答

8
你不需要使用each方法。只需选择已选中的输入框并删除它们的父元素(包含复选框的标签元素)即可:

$("#deleteAcc").on("click", function() {
  $(".checkbox input:checked").parent().remove();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="control-group">

  <label class="checkbox">
    <input value="0" type="checkbox">Message 0</label>
  <label class="checkbox">
    <input value="1" type="checkbox">Message 1</label>
  <label class="checkbox">
    <input value="2" type="checkbox">Message 2</label>
  <label class="checkbox">
    <input value="3" type="checkbox">Message 3</label>
  <label class="checkbox">
    <input value="4" type="checkbox">Message 4</label>
  <label class="checkbox">
    <input value="5" type="checkbox">Message 5</label>
  <label class="checkbox">
    <input value="6" type="checkbox">Message 6</label>
  <label class="checkbox">
    <input value="7" type="checkbox">Message 7</label>
  <label class="checkbox">
    <input value="8" type="checkbox">Message 8</label>

</div>


<button class="btn" type="button" id="deleteAcc">Delete</button>


2

实际问题在于$.each闭包中的this上下文是DOM节点本身的引用。您可以通过将this包装在$中来解决此问题:

$("#deleteAcc").on("click",function(){
    $(".control-group label.checkbox").each(function(){
        if ($(this).children(":first").is(':checked')) {
            $(this).remove();
        }
    }); 
});

1

请尝试使用此代码 http://jsfiddle.net/zp3vwh1j/2/

$("#deleteAcc").on("click",function(){
    $("input:checkbox").each(function() {
        if ($(this).is(":checked")) {
            $(this).parent().remove();
        }
    });
});

0
$().ready(function () {
    $('body').on('click', '#deletebtn', function () {

        $("#example1 tr").each(function () {
            var rowSelector = $(this);
            if (rowSelector.find("input[type='checkbox']").prop('checked'))
            {
                //THE MARKUP SHOWING THE ID IS NOT AVAILABLE
                //POST A TABLE ENTRY TO CLEAR UP
                var id = rowSelector.find('td').first().next().html();
                var sendObj = {Id : id};
                //USE JSON OBJECT
                $.ajax({
                    url : "/page.aspx/deleteRecord",//CHANGE TO YOUR URL
                    dataType: "json",
                    data: sendObj,
                    type: "POST",
                    success: function () {
                        alert("entry deleted");
                    }
                });
                rowSelector.remove();
            }
        });

    });
});

这个答案如果能加上一些解释就更好了,而不仅仅是贴代码。例如,这种方法与原帖作者已经尝试过的方法有何不同。 - Dan Lowe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接