0

我有一个程序,其逻辑与我在这里包含的虚拟样本相同。我试过一个简单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
}
4

2 回答 2

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>

演示:http: //jsfiddle.net/Vg5ND/

于 2013-03-14T02:11:56.997 回答
0
while(true)

应该让它永远运行。

于 2013-03-14T01:41:44.697 回答