简体   繁体   English

无法读取未定义的属性“长度” - JavaScript 中的错误

[英]Cannot read property 'length' of undefined - Error in JavaScript

I am learning animations in html / css / js using a code that reproduces a typewriter effect.我正在使用再现打字机效果的代码在 html / css / js 中学习动画。 Everything is working correctly, but I keep getting this error on my console:一切正常,但我在控制台上不断收到此错误:

**script.js:33 Uncaught TypeError: Cannot read property 'length' of undefined
at StartTextAnimation (script.js:33)
at script.js:37**

I tried some solutions that I found on google but nothing worked.我尝试了一些在谷歌上找到的解决方案,但没有任何效果。 In my console.log(dataText) each string in my array is executed correctly.在我的 console.log(dataText) 中,我的数组中的每个字符串都正确执行。 The error comes at the moment the loop is executed.错误出现在循环执行的那一刻。

This is the code I'm working on now:这是我现在正在处理的代码:

document.addEventListener('DOMContentLoaded', function(event) {
    // array with texts to type in typewriter
    var dataText = ["Cyber", "Sapa", "Synth", "CYBER // SAPA // SYNTH // TÔRTA // POMBADEV.2020"];

    // type one text in the typwriter
    // keeps calling itself until the text is finished
    function typeWriter(text, i, fnCallback) {

        // chekc if text isn't finished yet
        if (i < (text.length)) {
            // add next character to h2
            document.querySelector("h2").innerHTML = text.substring(0, i + 1) + '<span aria-hidden="true"></span>';

            // wait for a while and call this function again for next character
            setTimeout(function() {
                typeWriter(text, i + 1, fnCallback)
            }, 100);
        }
        // text finished, call callback if there is a callback function
        else if (typeof fnCallback == 'function') {
            // call callback after timeout
            setTimeout(fnCallback, 700);
        }
    }
    // start a typewriter animation for a text in the dataText array
    function StartTextAnimation(i) {
        if (typeof dataText[i] == 'undefined') {
            setTimeout(function() {
                StartTextAnimation(0);
            }, 5000);
        }
        // check if dataText[i] exists
        if (i < dataText[i].length) {
            // text exists! start typewriter animation
            typeWriter(dataText[i], 0, function() {
                // after callback (and whole text has been animated), start next text
                StartTextAnimation(i + 1);
            });
        }
    }
    // start the text animation
    StartTextAnimation(0);
});

If anyone can help me I will be very grateful!如果有人可以帮助我,我将不胜感激!

PS. PS。 Codepen link: https://codepen.io/iMorettini/pen/rNMOvZK Codepen 链接: https://codepen.io/iMorettini/pen/rNMOvZK

Maybe that dataText[i].length should be dataText.length of your line 33 .也许dataText[i].length应该是您的line 33dataText.length Because you are checking for the words, not the letters in the words.因为您正在检查单词,而不是单词中的字母。

would be helpful if you can post a codepen of your project or something similar.如果您可以发布项目的代码笔或类似内容,将会很有帮助。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM