HTML/Javascript复选框一旦无法正常工作,请在选中后取消选中

HTML/Javascript复选框一旦无法正常工作,请在选中后取消选中,javascript,checkbox,Javascript,Checkbox,我有一段代码,它在循环中的表中创建复选框并调用它们的onclick函数。在onclick函数中,我尝试填充一个全局数组,该数组将作为表的复选框的位置保持器。此外,如果选中一行,我必须对该行文本字段中的数字求和(我将其添加到变量百分比中),如果变量超过100,我必须提醒用户,并要求他在复选框中输入值,以便总和小于100 发生的情况是,当百分比>100时,它会抛出一个警报(我已经添加)。如果有3个复选框的值为34、56、10,如果选择了这3个复选框,则允许我提交一个提交按钮。但是,如果我返回并取消选

我有一段代码,它在循环中的表中创建复选框并调用它们的onclick函数。在onclick函数中,我尝试填充一个全局数组,该数组将作为表的复选框的位置保持器。此外,如果选中一行,我必须对该行文本字段中的数字求和(我将其添加到变量百分比中),如果变量超过100,我必须提醒用户,并要求他在复选框中输入值,以便总和小于100

发生的情况是,当百分比>100时,它会抛出一个警报(我已经添加)。如果有3个复选框的值为34、56、10,如果选择了这3个复选框,则允许我提交一个提交按钮。但是,如果我返回并取消选中带有10的行,它会抛出警报,说percanage是110(应该是90)

我如何解决这个问题

代码:

var tabId=document.getElementById(“AmnestyTransTbl”);
var tabrows=tabId.getElementsByTagName('tr');
风险值百分比=0,
c、 n;
var-ar=[];
对于(变量i=1,c=2;i 100){
警报(“特赦百分比,+Percentage+”,大于0!。请再次检查。“);
此项检查=错误;
}
if(this.checked==false)percentage=parseInt(percentage)-parseInt(tabId1.getElementsByTagName(“输入”)[n].value);
}
}
var td=document.createElement(“td”);
td.appendChild(复选框);
tabrows[i+1]。单元格[1]。appendChild(td);
}
函数getRowIndex(el){
while((el=el.parentNode)和&el.nodeName.toLowerCase()!='tr');
如果(el)返回el.rowIndex;
}
试试这个代码

    var tabId = document.getElementById("AmnestyTransTbl");
    var tabrows = tabId.getElementsByTagName('tr');

    var percentage = 0,
        c, n;
    var ar = [];
    for (var i = 1, c = 2; i <= tabrows.length - 3; i++, c = c + 2) {
        // Create CheckBox
        ar[i] = c;
        var checkBox = document.createElement("input");
        checkBox.setAttribute("type", "checkbox");
        checkBox.id = 'CB'.concat(i);
        checkBox.onclick = function () {

            var tabId1 = document.getElementById("AmnestyTransTbl");
            var rowInd = getRowIndex(this);

            CBValue[rowInd] = this.checked;
            n = ar[rowInd - 1];
            if (this.checked == false)
                percentage = parseInt(percentage) - parseInt(tabId1.getElementsByTagName("input")[n].value);
            else
                percentage = (parseInt(percentage) + parseInt(tabId1.getElementsByTagName("input")[n].value));
            if (parseInt(percentage) > 100) {
                alert("Amnesty Percentage," + percentage + ", greater than 0!. Plesase check again.");
                this.checked = false;
            }

        }
    }
    var td = document.createElement("td");
    td.appendChild(checkBox);
    tabrows[i + 1].cells[1].appendChild(td);
    }

    function getRowIndex(el) {
        while ((el = el.parentNode) && el.nodeName.toLowerCase() != 'tr');
        if (el) return el.rowIndex;
    }
var tabId=document.getElementById(“AmnestyTransTbl”);
var tabrows=tabId.getElementsByTagName('tr');
风险值百分比=0,
c、 n;
var-ar=[];
对于(变量i=1,c=2;i 100){
警报(“特赦百分比,+Percentage+”,大于0!。请再次检查。“);
此项检查=错误;
}
}
}
var td=document.createElement(“td”);
td.appendChild(复选框);
tabrows[i+1]。单元格[1]。appendChild(td);
}
函数getRowIndex(el){
while((el=el.parentNode)和&el.nodeName.toLowerCase()!='tr');
如果(el)返回el.rowIndex;
}

No这不起作用-当当前复选框行超过100时,它不会进行减法…嘿,我在if(parseInt(percentage)>100)块中又添加了一条减法语句,现在它工作得很好!谢谢。
    var tabId = document.getElementById("AmnestyTransTbl");
    var tabrows = tabId.getElementsByTagName('tr');

    var percentage = 0,
        c, n;
    var ar = [];
    for (var i = 1, c = 2; i <= tabrows.length - 3; i++, c = c + 2) {
        // Create CheckBox
        ar[i] = c;
        var checkBox = document.createElement("input");
        checkBox.setAttribute("type", "checkbox");
        checkBox.id = 'CB'.concat(i);
        checkBox.onclick = function () {

            var tabId1 = document.getElementById("AmnestyTransTbl");
            var rowInd = getRowIndex(this);

            CBValue[rowInd] = this.checked;
            n = ar[rowInd - 1];
            if (this.checked == false)
                percentage = parseInt(percentage) - parseInt(tabId1.getElementsByTagName("input")[n].value);
            else
                percentage = (parseInt(percentage) + parseInt(tabId1.getElementsByTagName("input")[n].value));
            if (parseInt(percentage) > 100) {
                alert("Amnesty Percentage," + percentage + ", greater than 0!. Plesase check again.");
                this.checked = false;
            }

        }
    }
    var td = document.createElement("td");
    td.appendChild(checkBox);
    tabrows[i + 1].cells[1].appendChild(td);
    }

    function getRowIndex(el) {
        while ((el = el.parentNode) && el.nodeName.toLowerCase() != 'tr');
        if (el) return el.rowIndex;
    }