【发布时间】:2014-03-13 20:44:22
【问题描述】:
我正在开发一个基于浏览器的文本风格游戏(这是一个使用一些图像/动画的文本游戏,但使用文本来传达故事/动作/命令)。
我曾经通过prompt("What is your class?");(Warrior,Wizard ETC)让它工作,但我想创建自己的函数来让它更漂亮。
下面是一些代码:
/*
1st value: Message being asked
2nd value: input field being used
3rd value: message block where question is presented
*/
var _cprompt = cPrompt('What is your class?', 'dialog-input', 'dialog-text');
alert(_cprompt);
这是实际的函数 cPrompt();
/*
Custom prompt class
message: The message shown
inputField: The ID of the txtfield where the user inputs his answer
messageField: The textarea where the response appears
userInput: Empty variable to store the users input
*/
function cPrompt(mssg, inputFieldId, messageFieldId) {
var message = mssg;
var inputField = $('#'+inputFieldId);
var messageField = $('#'+messageFieldId);
var userInput = "";
messageField.append(message);
// Detect enter space being pressed in inputField
inputField.keyup(function (e) {
if (e.keyCode == 13) {
userInput = inputField.val();
}
});
}
到目前为止一切都很好,但我需要它来阻止其他代码执行,直到用户填写响应并按下回车键(类似于 prompt();),所以在这种情况下它不会执行 alert(_cprompt); 直到用户给出了一些输入并按回车键。
我尝试使函数尽可能动态化,但请随意添加任何可能使其更好/更快/更易于使用的内容。
感谢您的帮助。
【问题讨论】:
-
“但我需要它来阻止其他代码执行,直到用户填写响应并按回车键” 这在 javascript 中是不可能的。 你唯一真正的选择是使用回调。您不能有选择地停止部分 javascript。如果你停止一个部分,你就停止了这一切。而且,当您停止这一切时,您也会停止与页面的所有用户交互,从而无法将文本添加到文本输入中。
-
那么prompt是怎么做的呢?
-
prompt 是内置在浏览器中的,它不是用 javascript 完成的。
-
您可以阻止用户使用叠加层与页面进行交互,但是您不能阻止 javascript 的执行,除非同时使用户无法使用文本输入。
-
那么,我必须做些什么才能拥有类似的系统,而不是像提示一样的行为? (文字出现在聊天屏幕,用户输入答案,游戏可能返回响应,代码正常继续)。
标签: javascript jquery html prompt