Неперехваченная ошибка типа для javascript

#javascript

#javascript

Вопрос:

Я получаю это сообщение «Неперехваченная ошибка типа: не удается прочитать свойство ‘split’ из null» для этого 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() amp;amp;
        $("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. Вы знаете, что означает ошибка?

2. зарегистрируйте свое значение nodeValue, чтобы проверить, имеет ли оно значение или нет, или оно не определено.

Ответ №1:

Замените это:

 if (elements[i].checked) {
  

с помощью этого:

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

Это устранит ошибку, хотя я понятия не имею, какие последствия это будет иметь для вашей программы.

Ошибка вызвана тем фактом, что elements[i].nextSibling.nodeValue при проверке имеет значение null.

Комментарии:

1. Привет, Saturnix, спасибо тебе за твой вклад. Теперь ошибка исчезла, но функция не работает. Это означает, что я не получаю итоговые данные… У вас есть идея?

2. элементы[i].nextSibling.nodeValue равно нулю. Напишите «debugger» в строке над if, откройте с помощью Chrome dev tools open (F12), перезагрузите страницу и наведите указатель мыши на nextSibling, чтобы увидеть, что внутри нее.

3. Привет, спасибо за ваш вклад. Ошибка теперь исчезла, но вывод такого итога и другие вычисления не работают. Есть ли способ проверить правильность кодирования и логики? Ранее was работал без каких-либо проблем. Я думаю, что это то, что нужно сделать с новой версией jquery. Любой ввод, с чего начать?

4. Я получаю это сообщение в консоли: [Нарушение] Обработчик ‘setTimeout’ занял 72 мс jquery-3.3.1.мин.js: 2 ..