0

チェックされたボックスとチェックされていないボックスの値に基づいて、非表示のフォームファイルに追加および削除し、画面テキストを更新しようとしています。チェックされたすべてのチェックボックス値を正常に合計し、.eachを使用して非表示の入力フィールドを更新することができました。しかし、私は合計から値を差し引くのにかなりの時間を費やしています。

避けられない問題は、実際にチェックを外しているボックスではなく、最初にチェックしたボックスの値を差し引くことです。ボックスをIDで参照しようとしましたが、役に立たなかったようです。

$(document).on("click", ".activities .checkbox-select", function(event){

    //event.preventDefault();
    $(this).parent().addClass("selected");

    //Checks the checkbox
    $(this).parent().find(":checkbox").prop('checked', true);

    var total = parseFloat($("#basePoints").val());
    $(':checkbox:checked.activity').each(function() {

        var activtyValues = 0;
        activtyValues = parseFloat(this.value);

        total += activtyValues;

        //Update the screen value
        $("#calulatedpoint").text(total);

        //Update the hidden value
        $("#calulatedPointsHidden").val(total);
    });     
});

$(document).on("click", ".activities .checkbox-deselect", function(event){

    //Get the checkbox id
    var id = $(this).attr('id');

    //event.preventDefault();
    $(this).parent().removeClass("selected");

    var total = $("#calulatedPointsHidden").val();
    checkedValue = $("input[@id="+id+"]:checked").val();  //It's finding the first checked checkbox value and subtracting that



    total -= checkedValue;

    //Update the screen value
    $("#calulatedpoint").text(total);

    //Update the hidden value
    $("#calulatedPointsHidden").val(total);

    //Unchecks the checkbox
    $(this).parent().find(":checkbox").removeAttr("checked");
});

私の引き算の問題を理解する助けをいただければ幸いです。追加セクションを改善するためのヒントも素晴らしいでしょう。ありがとう。

4

2 に答える 2

0

チェックボックスの値を合計する方法を模倣することで、問題を解決することになりました。関数はほぼ同じになっているので、1つの関数を使用してチェックとチェック解除を処理することに取り組みます。以下は、現在の合計からチェックを外していたチェックボックスの値を差し引いたものです。

$(document).on("click", ".activities .checkbox-deselect", function(event){

    //event.preventDefault();
    $(this).parent().removeClass("selected");

    //Unchecks the checkbox
    $(this).parent().find(":checkbox").removeAttr("checked");

    var total = parseFloat($("#basePoints").val());
    $(':checkbox:checked.activity').each(function() {

        var activtyValues = 0;
        activtyValues = parseFloat(this.value);

        total += activtyValues;

    });

    //Update the screen value
    $("#calulatedpoint").text(total);

    //Update the hidden value
    $("#calulatedPointsHidden").val(total);
});
于 2012-06-10T18:07:46.093 に答える
0

欠陥はここにあると私は信じています

checkedValue = $("input[@id="+id+"]:checked").val();

このチェックボックスはチェックされなくなりましたが、jqueryセレクターでチェックされていることを指定しています。idも含めているため、値が返されないようです。

また、@記号は属性の選択に使用されなくなりました。古いバージョンのjqueryを使用している可能性がありますか?

var checkedValue = $("input[id=" + id + "]").val();
console.log(checkedValue);

編集: 可能な代替バージョンを追加し、1クリックイベントハンドラーを使用します

$(document).on("click", ".activities", function(event) {
    // add up all the checked items
    // set/reset the hidden field

    if ($(this).is(":checked")) {
        // update UI for checked item
    } else {
        // update UI for unchecked item
    }
});
于 2012-06-09T05:13:15.257 に答える