繁体   English   中英

为什么当我在另一个函数完成后调用函数时,它又调用了所有先前的函数?

[英]Why when I call function after another is completed, it calls all previous?

我想做基于控制台的文字游戏。 用户输入姓名时,应使用年龄输入功能,而在输入年龄后,应调用性别输入。 但是当我写下年龄时,它将再次调用getAge + next函数。 在next函数之后,它将调用getAge + next函数+ next函数。 我希望你知道我的意思。 我该如何解决? 我尝试了一个回调,但没有帮助。

 $(document).ready(function(){ var Player = { username : "", age : null, sex : "", }; function textArea($text){ return $('#textArea').val($('#textArea').val() + $text); }; function clearInput(){ return $('#inputs').val(''); } var functions = { start : function start(){ functions.getUsername(); }, //START GET USERNAME getUsername : function getUserName(callback){ //Hello! Tell me your username! textArea("Vítej! Zadej svou přezdívku!"); $('#inputs').keypress(function (e){ if (e.which == 13){ Player.username = $('#inputs').val(); textArea("\\n" + Player.username + "\\n"); clearInput(); functions.getAge(); } }); }, //END GET USERNAME //START GET AGE getAge : function getAge(){ //Tell me your age! textArea("Zadej svůj věk!"); $('#inputs').keypress(function (e){ if (e.which == 13){ Player.age = $("#inputs").val(); textArea("\\n" + Player.age + "\\n"); clearInput(); functions.getSex(); } }); }, //END GET AGE getSex : function getSex(){ //Tell me your sex: male/female textArea("Zadej pohlaví: muž/žena"); $('#inputs').keypress(function (e){ if (e.which == 13){ Player.sex = $('#inputs').val(); textArea("\\n" + Player.sex + "\\n"); clearInput(); //Another function } }); } }; functions.start(); }); 
 #content>*{ display: block; margin: 0 auto ; } #textArea{ box-shadow: 2px 2px 2px grey; background: black; color: white; } #inputs{ width: 61%; margin-top: 10px; background: black; color: white; } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <link rel="stylesheet" type="text/css" href="style.css"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.2/jquery.min.js"></script> <script src="script.js"></script> </head> <body> <div id="content"> <textarea id="textArea" rows="30" cols="100"></textarea> <input type="text" id="inputs"> </div> </body> </html> 

每个函数调用都会向您的文本区域添加一个keypress监听器。 因此,在调用getAge()之后,您将拥有2个侦听器。 因此,下次按键将调用getAgegetSex 因此,一种解决方案是在设置新的侦听器之前删除先前的侦听器。

暂无
暂无

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

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