Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/404.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript中连续更新html而不出现最大调用堆栈大小错误的最佳方法是什么_Javascript_Html - Fatal编程技术网

在javascript中连续更新html而不出现最大调用堆栈大小错误的最佳方法是什么

在javascript中连续更新html而不出现最大调用堆栈大小错误的最佳方法是什么,javascript,html,Javascript,Html,我正在为一个朋友的网站写一个简单的基于文本的游戏。我需要能够更改HTML元素或更新HTML页面,而不会出现超出最大调用堆栈的错误。我目前正在使用 document.getElementById('console').innerHTML += "whatever" 我需要一个没有错误的方法 这是加载的第一个函数。然后,它转到提示_输入;功能 function title_screen(){ document.getElementById('console').innerHTML += '

我正在为一个朋友的网站写一个简单的基于文本的游戏。我需要能够更改HTML元素或更新HTML页面,而不会出现超出最大调用堆栈的错误。我目前正在使用

document.getElementById('console').innerHTML += "whatever"
我需要一个没有错误的方法

这是加载的第一个函数。然后,它转到提示_输入;功能

function title_screen(){
    document.getElementById('console').innerHTML += '...'
    quests.push('Getting Started');
    prompt_input();
}
这是提示输入函数。 它在运行适当的函数时接受用户输入。 除重启外的所有功能;函数返回提示_输入;获取下一轮玩家输入

function prompt_input(){
    var action = document.getElementById("myInput").value;
    if (action == ""){
        prompt_input();

    }
    else{  
    document.getElementById('console').innerHTML += action;
var acceptable_actions = [...];
    var acc_check = acceptable_actions.includes(action);
    if (action  == 'help'){
        instruction_menu();
    }
    else if (action == "play"){
        prompt_input();
    }
    else if (action == "y"){
        player_yes();
    }
    else if (action == "yes"){
        player_yes();
    }
    else if (action == 'n'){
        player_no();
    }
    else if (action == 'no'){
        player_no();
    }
    else if (action  == 'loc'){
        print_location();
        prompt_input();
    }
    else if (action  == 'location'){
        print_location();
        prompt_input();
    }
    else if (action == 'name'){
        document.getElementById('console').innerHTML += "..."
        prompt_input();
    }
    else if (action == 'look'){
        if (player_location == 'The Casino'){
            casino_look();
}
        else{
            player_look();
        }}
    else if (action == 'right'){
        player_right();
        }
    else if (action == 'left'){
        player_left();
    }
    else if (action  == 'restart'){
        restart_game();
    }
    else if (action  == 'items'){
        items_print();
        prompt_input();
        }
    else if (action  == 'read'){
        player_read();
        prompt_input();
        }
    else if (action  == 'play'){
        if (player_location == 'Title Screen'){
            start_game();
        }
        else{
            document.getElementById('console').innerHTML += "..."
            prompt_input();
        }
        }
    else if (action  == 'evb'){
        hidden_prompt();
    }
    else if (action  == 'outside'){
        print_outside();
    }
    else if (action  == 'back'){
        if (items.includes('Emu') === true){
            if (player_location == 'Title Screen'){
                document.getElementById('console').innerHTML += '...'
                prompt_input();
            }
            else{
                player_back();
            }
        }
        else if (items.includes('Clown Car') === true){
            if (player_location == 'Title Screen'){
                document.getElementById('console').innerHTML += '...'
                prompt_input();
            }
            else{
                player_back();
            }
        }
        else if (items.includes('Sailboat') === true){
            if (player_location == 'Title Screen'){
                document.getElementById('console').innerHTML += '...'
                prompt_input();
            }
            else{
                player_back();
            }
        }
        else if (characters.includes('KGB Platoon') === true){
            if (player_location == 'Title Screen'){
                document.getElementById('console').innerHTML += '...'
                prompt_input();
            }
            else{
                player_back();
}
}
else if (characters.includes('KGB Horde') === true){
            if (player_location == 'Title Screen'){
                document.getElementById('console').innerHTML += '...'
                prompt_input();
            }
            else{
                player_back();
}
}
else if (characters.includes('KGB Army') === true){
            if (player_location == 'Title Screen'){
                document.getElementById('console').innerHTML += '...'
                prompt_input();
            }
            else{
                player_back();
}
}
}
    else if (action  == 'next'){
        if (items.includes('Emu') === true){
            if (player_location == 'End Screen'){
                document.getElementById('console').innerHTML += '...'
                prompt_input();
            }
            else{
                player_next();
            }
        }
        else if (items.includes('Clown Car') === true){
            if (player_location == 'End Screen'){
                document.getElementById('console').innerHTML += '...'
                prompt_input();
            }
            else{
                player_next();
            }
            }
        else if (characters.includes('KGB Horde') === true){
            if (player_location == 'End Screen'){
                document.getElementById('console').innerHTML += '...'
                prompt_input();
        }
            else{
                player_next();
            }
    }
    else if (characters.includes('KGB Army') === true){
            if (player_location == 'End Screen'){
                document.getElementById('console').innerHTML += '...'
                prompt_input();
        }
            else{
                player_next();
            }
    }
        else if (items.includes('Sailboat') === true){
            if (player_location == 'End Screen'){
                document.getElementById('console').innerHTML += '...'
                prompt_input();
}
            else{
                player_next();
}}
}
    else if (action == 'balance'){
        print_balance();
}
    else if (action == 'bal'){
        print_balance();
    }
    else if (action == 'shop'){
        player_store();
    }
    else if (action == 'sell'){
        player_sell();
    }
    else if (action == 'store'){
        player_store();
}
    else if (action == 'buy'){
        player_buy();
}
    else if (action == 'boom'){
        boom();
}
    else if (action == 'military gun call'){
        military_gun_call();
}
    else if (action == 'mgc'){
        military_gun_call();
}
    else if (action == 'eat'){
        player_eat();
    }
    else if (action == 'oml'){
        omlette();
}
    else if (action == 'russia'){
        read_russia_book();
    }
    else if (action  == 'dev'){
        document.getElementById('console').innerHTML += "..."
        prompt_input();
}
    else if (action == 'hostage'){
        if (player_location == 'Milk Store'){
            if ('Gun' in  items === true){
                document.getElementById('console').innerHTML += "..."
                 items.push("Stalin's Hair");
                 taken_items.push("Stalin's Hair");
                document.getElementById('console').innerHTML += "You have aquired Stalin's Hair."
                document.getElementById('console').innerHTML += "..."
                document.getElementById('console').innerHTML += 'You have aquired Milk.'
                 items.push("Milk");
                 taken_items.push("Milk");
                prompt_accomplish[player_location] = true;
                 balance =  balance - .35;
                prompt2();
            }
            else if (death_survivability >= 1){
                document.getElementById('console').innerHTML += "You survived death this time, but your death survivability has decreased."
                 death_survivability =  death_survivability - 1;
                prompt_input();
}
            else{
                document.getElementById('console').innerHTML += "..."
                restart(30);
            }
        }
        else{
            document.getElementById('console').innerHTML += "That command doesn't work here"
}
}
    else if (action == 'produce'){
        if (player_location == 'Milk Store'){
            if (death_survivability >= 1){
                document.getElementById('console').innerHTML += "You survived death this time, but your death survivability has decreased."
                 death_survivability =  death_survivability - 1;
                prompt_input();
}
            else{
                document.getElementById('console').innerHTML += "..."
                restart(10);
            }
        }
        else{
            document.getElementById('console').innerHTML += "That command doesn't work here"
}
}

    else if (action == 'dairy'){
        if (player_location == 'Milk Store'){
            document.getElementById('console').innerHTML += "..."
            prompt_accomplish[player_location] == true;
             items.push("Milk");
             taken_items.push("Milk");
             balance =  balance - .35;
            prompt2();
        }
        else{
            document.getElementById('console').innerHTML += "That command doesn't work here"
}
}
    else if (action == 'quests'){
        quest_print();
        prompt_input();
}

    else if (action == 'left wing'){
        if (player_location == 'Picracko Gallery'){
            if (death_survivability >= 1){
                document.getElementById('console').innerHTML += "You survived death this time, but your death survivability has decreased."
                 death_survivability =  death_survivability - 1
                prompt_input();
    }
            else{
                document.getElementById('console').innerHTML += "..."
                restart(10);
    }
        }
        else{
            document.getElementById('console').innerHTML += "That command doesn't work here"
    }
}
    else if (action == 'right wing'){
        if (player_location == 'Picracko Gallery'){
            document.getElementById('console').innerHTML += "..."
            prompt2();
}
        else{
            document.getElementById('console').innerHTML += "That command doesn't work here"
        }
}

    else if (action == 'bet'){
        bet_print = "Bet." * 1000;
        for (character in bet_print){
            document.getElementById('console').innerHTML += character;
        }
        prompt_input();
    }

    else if (action == 'completed quests'){
        completed_quest_print();
    }
    else if (action == 'clear'){
        clear();
        prompt_input();
    }
    else if (action == 'characters'){
        characters_print();
    }
    else if (action == 'tmdc'){
        if ( tmdc !== true){
             completed_quests.push("...");
             items.push('Emu');
             balance =  balance + (100*10*10*10*10);
             tmdc = true;
             items.push("...");
            prompt_input();
        }
        else{
            document.getElementById('console').innerHTML += "..."
            prompt_input();
}
        prompt_input();
}
    else if (action  == 'shark'){
        document.getElementById('console').innerHTML += "..."
        prompt2();
    }
    else if (action  == 'harmless fish'){
        document.getElementById('console').innerHTML += "..."
        prompt2();
    }
    else if (action  == 'communism'){
        completed_quests.push("Summon Stalin");
        prompt_input();
    }
    else if (action  == "bowling alley"){
        if (player_location == "Payphone"){
            player_location = "Bowling Alley"
            prompt_accomplish2[player_location] = true;
            document.getElementById('console').innerHTML += "..."
            prompt_input();
    }
        else{
            document.getElementById('console').innerHTML += "That command does not work here."
            prompt_input();
        }
    }
    else if (action  == "redacted"){
        if (player_location == "Payphone"){
            player_location = "REDACTED, Russia"
            prompt_accomplish2[player_location] = true;
            document.getElementById('console').innerHTML += "..."
            prompt_input();
        }
        else{
            document.getElementById('console').innerHTML += "That command does not work here."
            prompt_input();
        }
        }
    else if (action  == "india"){
        if (player_location == "Payphone"){
            prompt_accomplish2[player_location] = true;
            player_location = "India"
            document.getElementById('console').innerHTML += "..."
            prompt_input();
        }
        else{
            document.getElementById('console').innerHTML += "That command does not work here."
            prompt_input();
        }
        }
    else if (action  == "picracko"){
        if (player_location == "Payphone"){
            document.getElementById('console').innerHTML += "..."
            document.getElementById('console').innerHTML += "..."
            prompt_input();
        }
        else{
            document.getElementById('console').innerHTML += "That command doesn't work here."
            prompt_input();
        }
        }
    else if (action  == "gerbils"){
        if (player_location == "Payphone"){
            document.getElementById('console').innerHTML += "..."
            document.getElementById('console').innerHTML += "..."
            prompt_input();
        }
        else{
            document.getElementById('console').innerHTML += "That command doesn't work here."
            prompt_input();
        }
        }
    else if (action == "shoeburt"){
        if (player_location == "Payphone"){
            document.getElementById('console').innerHTML += "..."
            prompt3();
}
        else{
            document.getElementById('console').innerHTML += "That command doesn't work here."
            prompt_input();
}}
    else if (action == "fuick"){
        if (player_location == "Payphone"){
            document.getElementById('console').innerHTML += "..."
            document.getElementById('console').innerHTML += "..."
            prompt_input();
}
        else{
            document.getElementById('console').innerHTML += "That command doesn't work here."
            prompt_input();
        }
}
    else if (action == "eddie"){
        if (player_location == "Payphone"){
            document.getElementById('console').innerHTML += "..."
            document.getElementById('console').innerHTML += "..."
            prompt_input();
        }
        else{
            document.getElementById('console').innerHTML += "That command doesn't work here."
            prompt_input();
        }
    }
    else if (action == 'shake'){
        magic_ball();
    }
    else if (action == "painting"){
        picracko_original();
    }
    else if (action == 'h2z456d'){
        if (h2z456d === false){
            document.getElementById('console').innerHTML += "Congrats on getting the code! Here is 10000 Dollars, an omletting gun and 4 omlettes."
             balance =  balance + 10000;
             items.push("Omletting Gun");
             items.push("Omlette");
             items.push("Omlette");
             items.push("Omlette");
             items.push("Omlette");
             h2z456d = true;
            prompt_input();
        }
        if (h2z456d === true){
            document.getElementById('console').innerHTML += "You already have used this prompt."
            prompt_input();
        }
        }
     if( acc_check === false){
        var Action_help = "You are unaware of what to do. Try a different command. (Type help for a list of actions)"; 
         document.getElementById('console').innerHTML += Action_help;
        prompt_input();
            }

}
}
这里有一个无限循环

此条件之前的任何内容都不能在下一次调用时更改条件:如果输入的值为,则它仍然为,并且您的代码将继续,直到达到最大调用堆栈

我不太确定您希望这个递归调用做什么,但快速查看一下,我想说,在这种情况下,您只需要提前退出:

function prompt_input(){
  var action = document.getElementById("myInput").value;
  if (action == ""){
    return; // early exit
  }
  ...

您需要提供所有相关代码。递归调用太多函数时会出现堆栈大小错误。代码很长,包含很多不相关的内容,因此我不确定要包含哪些位,因为大多数函数都使用innerHTML,因为这就是我在Html页面中添加特定于输入的文本的方式。我试图找到一种替代innerHTML的方法,可以在许多函数中重复使用,而不会出现堆栈大小错误。我添加了一些我认为相关的重复函数。这看起来仍然不是罪魁祸首。您是否有触发innerHTML更改的循环?InnerHTML不太可能是问题所在。获得此错误的一种可能方法是,您有一个函数A调用函数B,函数B本身调用函数A,因此您得到一个堆栈A{B{A{B{…}}}。这可能会导致堆栈大小错误,因为没有函数实际终止。一个更好的方法是让函数A返回函数B,反之亦然,这样一些主函数M可以调用M{A->B->A->B->……},因此堆栈上的函数在任何时候都是有限的。
function prompt_input(){
  var action = document.getElementById("myInput").value;
  if (action == ""){
    return; // early exit
  }
  ...