开发者问题收集

未捕获的 JavaScript 类型错误

2019-03-12
103

我收到了此消息“Uncaught TypeError:无法读取 null 的属性‘split’”,此消息适用于此 linesplitted = elements[i].nextSibling.nodeValue.split("||"); 代码如下。如果您能提供解决方案,我将不胜感激。此代码之前曾运行过。我认为这与新的 php 或 jquery 有关...

    $('#r_NEStd').hide(); // Das Feld ist am Anfang versteckt und duch klicken 
auf NE wird wieder gezeigt.
$("input[name='x_Posten[]'], input[name='x_NE[]']").click(function() { // 
    Field2 has multiple inputs(checkboxes) so they should be selected by name
    document.getElementById("x_Total").readOnly = true;
    document.getElementById("x_Auslagen").readOnly = true;
    document.getElementById("x_RBetrag").readOnly = true;
    if ($("input[name='x_Posten[]']:checked").val() &&
        $("input[name='x_NE[]']:checked").val()) { // WENN NichtErhaeltlichkeit und 
        Posten geklickt sind
        document.finvoicesadd.x_Total.value = '';

        var Anzahl = 0;
        var Auslagen = 0;
        var AuslagenMwSt = 0;
        var Total = 0;
        var splitted;
        var nestdsatz = document.finvoicesadd.x_NEStd.value;
        var e = document.getElementById("x_Vorschuss");
        var VorschussValue = e.options[e.selectedIndex].value;
        var nestdsatz = document.finvoicesadd.x_NEStd.value;
        var elements = document.getElementsByName("x_Posten[]");
        for (i = 0; i < elements.length; i++) {
            if (elements[i].checked) {
                splitted = elements[i].nextSibling.nodeValue.split("||");
                Auslagen = Auslagen + +parseFloat(splitted[4]);
                AuslagenMwSt = AuslagenMwSt + +(parseFloat(splitted[4]) *
                    (1 + parseFloat(splitted[5])));
                Anzahl = Anzahl + +parseFloat(splitted[2]);
                Total = Total + +(parseFloat(splitted[2] * nestdsatz) *
                    (1 + parseFloat(splitted[5])));
            }
        }
        document.finvoicesadd.x_Auslagen.value = Auslagen.toFixed(2);
        document.finvoicesadd.x_Total.value = (Total + AuslagenMwSt).toFixed(2);
        document.finvoicesadd.x_RBetrag.value = (Math.round(((Total +
            AuslagenMwSt) - VorschussValue) * 20, 0) / 20).toFixed(2);
        document.finvoicesadd.x_Vorlage.value = "rechnungne";

    } else { // WENN x_Posten oder NE nicht oder nur ein Feld gelickt ist
        document.finvoicesadd.x_Total.value = '';
        var Anzahl = 0;
        var Auslagen = 0;
        var Total = 0;
        var splitted;
        var e = document.getElementById("x_Vorschuss");
        var VorschussValue = e.options[e.selectedIndex].value;
        var nestdsatz = document.finvoicesadd.x_NEStd.value;
        var elements = document.getElementsByName("x_Posten[]");
        for (i = 0; i < elements.length; i++) {
            if (elements[i].checked) {
                splitted = elements[i].nextSibling.nodeValue.split("||");
                // Auslagen = Auslagen+ +(parseFloat(splitted[4])* 
                (1 + parseFloat(splitted[5])));
            Auslagen = Auslagen + +parseFloat(splitted[4]);
            Anzahl = Anzahl + +parseFloat(splitted[3]);
            Total = Total + +parseFloat(splitted[6]);
        }
    }
    document.finvoicesadd.x_Auslagen.value = Auslagen.toFixed(2);
    document.finvoicesadd.x_Total.value = (Total).toFixed(2);
    document.finvoicesadd.x_RBetrag.value = (Math.round(((Total) -
        VorschussValue) * 20, 0) / 20).toFixed(2);
    document.finvoicesadd.x_Vorlage.value = "rechnung";
}
});
1个回答

将这个:

if (elements[i].checked) {

替换为:

debugger;
if (elements[i].checked && elements[i].nextSibling.nodeValue != null) {

这将解决错误,虽然我不知道它会对您的程序产生什么影响。

错误是由于您检查时 elements[i].nextSibling.nodeValue 为空。

Saturnix
2019-03-12