为什么当我调用一个又一个函数时,它调用的都是以前的
Why when I call function after another is completed, it calls all previous?
我想做一个基于控制台的文本游戏。当用户写下自己的名字时,它应该用年龄输入来调用函数,在年龄输入之后,它应该调用性别输入。但当我写年龄时,它会再次调用getAge+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()
通话之后,你有两个听众。因此,下一次按键将调用getAge
AND getSex
。因此,一种解决方案是在设置新侦听器之前删除以前的侦听器。
相关文章:
- jQuery使一个又一个充满活力
- RaphaelJS:如何制作一个又一个元素的动画
- 如何运行一个又一个脚本
- 使用 jQuery animate 时绘制一个又一个对象的线条
- 为什么当我调用一个又一个函数时,它调用的都是以前的
- 在 JavaScript 中延迟一个又一个函数的最佳方法
- 在 Ajax 加载的外部 html 中调用一个又一个脚本的事件
- JavaScript:一个又一个循环不执行
- 如何在Javascript中以过程化的方式运行一个又一个语句
- $('html').单击一个又一个单击事件
- WebGL-呈现一个又一个形状时出现问题
- 如何化解一个又一个的承诺
- 如何使用
- JavaScript Regex(替换),如果缺少一个又一个单词
- 用buzz.js播放一个又一个声音
- 从URL运行一个又一个函数
- 如何启动一个又一个脚本
- 玩一个又一个精灵表
- 如何在D3.js中运行一个又一个函数
- PhantomJS打开一个又一个页面