【问题标题】:Update div with values from checkbox使用复选框中的值更新 div
【发布时间】:2016-07-10 22:02:10
【问题描述】:

我希望能够在选中任何复选框时立即更新 div。我目前可以这样做,但是,当我选中“全选”复选框以选中所有复选框时,它不会使用我的复选框中的信息更新我的 div。

这是我到目前为止所做的:https://jsfiddle.net/3rxk043v/2/

我的 HTML:

<div id="item-list"></div>
<p>Total:<span class="total"></span></p>
<label><input type="checkbox" id="selectall" class="c-check">select all</label>
<label><input type="checkbox"class="selectcheckbox selectedtotal" name="items" value="Thomas Hobbes_100" data-amt="100">Thomas</label>
<label><input type="checkbox"class="selectcheckbox selectedtotal" name="items" value="Jerry Xavier_150" data-amt="150">Jerry</label>
<label><input type="checkbox"class="selectcheckbox selectedtotal" name="items" value="Sam Edith_80" data-amt="80">Sam</label>

jQuery:

$('#selectall').change(function() {
    $('.selectcheckbox').prop('checked', this.checked);
 });

$('input[name="items"]').change(function () {
    var inputVal = $(this).val();
    var className = inputVal.replace(/ /g, '_');
    var inputArr = inputVal.split('_');

    if ($(this).prop('checked')) {
        $("#item-list").append('<span class="span_' + className + '"><li>'+ inputArr[0] + '<p>$' + inputArr[1] + '</p></li></span>');
    } else {
        $('.span_'+className).remove();
    }
});

var $calculateselected = $('.selectedtotal').change(function () {
    var v = 0;
    $calculateselected.filter(':checked').each(function () {
        v += $(this).data('amt');
    })

    var left = 2000-v;
    $('.total').html(v);
    $('.amtleft').html(left);
});
$('.selectedtotal:checked').change();

点击全选时是否有任何东西阻止了 div 的更新?所有复选框都被选中,但我的 div 中没有任何更新。

更新: 如果我要添加“.trigger('change');”对于我的代码,当我在选择“全选”复选框之前先选择一个复选框(例如 Thomas)时,Thomas 将被打印两次。如何防止这种情况发生?

【问题讨论】:

    标签: javascript jquery html checkbox


    【解决方案1】:

    $('#selectall').change(function() {
          $("#item-list").html("");
            $('.selectcheckbox').prop('checked', this.checked);
             $('input[name="items"]').trigger("change");
     });
     
     $('input[name="items"]').change(function () {
            var inputVal = $(this).val();
            var className = inputVal.replace(/ /g, '_');
            var inputArr = inputVal.split('_');
    
            if ($(this).is(':checked')) {  //which checkbox was checked
                $("#item-list").append('<span class="span_' + className + '"><li>'+ inputArr[0] + '<p>$' + inputArr[1] + '</p></li></span>');
            } else {
                $('.span_'+className).remove();
            }
        });
    
        var $calculateselected = $('.selectedtotal').change(function () {
            var v = 0;
            $calculateselected.filter(':checked').each(function () {
                v += $(this).data('amt');
            })
            
            var left = 2000-v;
            $('.total').html(v);
            $('.amtleft').html(left);
        });
        $('.selectedtotal:checked').change();
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <div id="item-list"></div>
    <p>
    Total:<span class="total"></span>
    </p>
    <label><input type="checkbox" id="selectall" class="c-check">select all</label>
    
    <label><input type="checkbox"class="selectcheckbox selectedtotal" name="items" value="Thomas Hobbes_100" data-amt="100">Thomas</label>
    
    <label><input type="checkbox"class="selectcheckbox selectedtotal" name="items" value="Jerry Xavier_150" data-amt="150">Jerry</label>
    
    <label><input type="checkbox"class="selectcheckbox selectedtotal" name="items" value="Sam Edith_80" data-amt="80">Sam</label>

    【讨论】:

    • 使用触发器后,如果我在选择“全选”复选框之前先选择一个复选框(例如 Thomas),Thomas 将被打印两次。有没有办法防止这种情况发生?
    • 你需要从 div 中删除所有项目:$("#item-list").html("");在所有时间之前
    【解决方案2】:

    将以下内容添加到您的代码中:

    .trigger('change');
    

    变成这样

    $('#selectall').change(function() {
        $('.selectcheckbox').prop('checked', this.checked).trigger('change');
    });
    

    并保持一切原样。

    【讨论】:

    • 如果我先单击一个复选框(例如 Thomas),然后选择“全选”复选框,Thomas 将在我的 div 中打印两次。有没有办法阻止这种情况发生?谢谢!
    • 是的,您在添加跨度之前检查它是否已经存在,您可以使用此代码if($('#item-list .span_'+ className).length == 0) {$("#item-list").append(...... }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-08
    • 2016-07-26
    • 1970-01-01
    • 2014-11-27
    • 2018-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多