我有一个程序,其逻辑与我在此处包含的虚拟样本相同。我尝试过一个简单的while (1)
,它不会运行(至少UI没有显示)。此示例基于变量设置运行while
循环,该变量设置由addEventListener()
更改,应该终止循环。但是,它的行为与while (1)
一样。简单地说,我需要做的是等待密码输入并验证它是否匹配。如果没有,我继续循环。如果匹配,则程序进入另一个循环(未在示例中显示),只要程序运行,该循环就需要运行。第二个while
基于用户输入运行多个函数。每次有用户输入时,都会运行while
的另一个循环。我不喜欢使用另一个线程。似乎任何创建循环的逻辑都以相同的方式作出反应,即没有执行或至少没有可见的执行。换句话说,为什么while (1)
或for (;;)
不起作用!任何帮助将不胜感激。
//app.js
var debugText = Titanium.UI.createLabel({
top: 600,
left: 0,
width: 500,
height: 100,
color: '#777',
font:{fontSize:40},
hintText: 'debug text'
});
var entryCodeText = Titanium.UI.createTextField({
top: 300,
left: 0,
width: 400,
height: 100,
color: '#777',
font:{fontSize:40},
hintText: 'Enter Passcode'
});
//add labels and fields to window
win.add(entryCodeText);
win.add(debugText);
win.open();
while (exitCode == 0) {
// do stuff
} // end of exitCode while loop
// start of continuous program loop
while (1) {
// if no event, just continue loop
// if event , execute several functions and continue with loop
} // end of while(1) loop - runs as long as program runs
//*************************************************************************
entryCodeText.addEventListener("return", function(e) {
if (computeCode(entryCodeText.value)< 0) {
debugText.text = "failed computecode";
exitCode = 0;
continue;
} else {
debugText.text = "passed computeCode()";
exitCode = 1;
break;
}
});
//continue with other logic on break and exitCode = 1
//************************************************************
function computeCode(textValue) {
// do stuff to the textValue
}
答案 0 :(得分:0)
while(true)
应该让它永远运行。
答案 1 :(得分:0)
使用keyup或keydown evt可能会更好。
那就是,如果你必须这样做,你可以使用setTimeout函数。
在脚本执行方面,它总是最后运行(即使在浏览器内部UI操作之后)也因此阻止了UI的锁定。
此示例使用2个文本框。一旦第一个具有正确的值,它就会进入内循环。
<html>
<body>
UserName: <input type="text" id="txt" /><br>
Password: <input type="text" id="txt2" />
<script>
var txt = document.getElementById('txt'),
txt2 = document.getElementById('txt2');
var loop, innerLoop;
(function loop(){
setTimeout(function(){
if(txt.value === 'name'){
alert('correct username entered');
//new loop
(function innerLoop(){
setTimeout(function(){
if(txt2.value === 'password') {
alert('correct password entered');
return;
}
else setTimeout(innerLoop,0);
},0);
})();
return;
}
else setTimeout(loop,0);
},0);
})();
</script>
</body>
</html>