2015-03-10 5 views
0

Я пытаюсь создать небольшой термин в js. Я новичок, иди, что именно неправильно. Я хорошо разбираюсь в C, C++ и android, но я не могу найти проблему в своем коде.Получение нескольких входных данных из того же div

Когда я использую команду входа в систему, когда я нажимаю кнопку ввода после имени пользователя, она сообщает мне нераспознанную команду. Введите help для списка команд. IDK что не так.

function command(){ 
var output = ''; 

todo = getinput(); 

if(todo === 'clear'){ 
    document.getElementById('output').innerHTML = ''; 
    return; 
}else if(todo =='login'){ 
    var auth = login(); 
    if (auth == 1) output = 'Success'; 
    else output = 'Failed'; 
} else if(todo.length > 0){ 
    output = 'Unrecognized command. Type <b>help</b> for a list of commands.<hr>'; 
} 

document.getElementById('output').innerHTML = document.getElementById('output').innerHTML + output;} 

function login() { 
document.getElementById('output').innerHTML = document.getElementById('output').innerHTML + 'User Name: '; 
setTimeout(loop, 0); 
var uname = getinput(); 
setTimeout(loop, 0); 
document.getElementById('output').innerHTML = document.getElementById('output').innerHTML + '3' + uname + '3' + '<BR>Password: '; 
var pass = getinput(); 
//if (uname == 'root' && pass = 'toor') return 1; 
//else return 0; 
return 0;} 

function getinput(){ 
var input = document.getElementById('input').value; 
document.getElementById('input').value = ''; 
return input; } 
+0

какая ошибка у вас есть? –

+0

Что делает 'loop'? – Jack

+0

Команда продолжает выполнять каждый раз, когда я ввожу что-то в функцию login(). –

ответ

0

Заменить:

output = 'Unrecognized command. Type <b>help</b> 

с

output = 'Unrecognized command ('+todo+'). Type <b>help</b> 

Это, вероятно, вернуть свое имя пользователя. Ваш код неполный, но похоже, что вы строите терминал. Ваша команда() выполняется каждый раз, когда вы что-то делаете. Этот процесс является следующим:

execution 1) var auth = login(); 
execution 2) command('myUser') 
execution 3) todo = getinput(); 
execution 4) else if(todo.length > 0){ 
result: myUser is greater than 0, spit out error 

Я думаю, вы можете решить его отсюда. Также рассмотрите использование jQuery.

EDIT: вам нужно определить, что такое команда, и что такое переменный ввод. Вы можете установить переменную типа "commandLock = true". Каждый раз, когда у вас есть ввод, если commandLock имеет значение true, он не будет выполнять функцию command() AGAIN (так как он выполняется каждый раз, когда терминал отправляется).

var commandLock=false; 
function command() { 
    if(commandLock==true) return false; 

    // determine the command 
    checkCommandAndRunFunction(); // decides to execute login() 
} 
function login() { 
    commandLock=true; 
    var inp = $('#terminalInput').val(); // jQuery 
    // the rest 
} 

Если ваш цикл не фактически держит сценарий от завершения, возможно, вы должны использовать функцию обратного вызова http://recurial.com/programming/understanding-callback-functions-in-javascript/ или http://www.w3schools.com/jquery/jquery_callback.asp

+0

Как прекратить выполнение команды, когда я вызываю getInput из логина? Есть части кода, который я не скопировал здесь. –

+0

Я добавил код, который поможет логически. Если это не поможет, я бы рекомендовал опубликовать все JS. Ваша проблема относительно проста; вам просто нужно определить тип ввода (команду или ввод переменной обратного вызова) и отправить данные там, где это необходимо. Еще несколько jQuery: $ ("#target") .submit (функция (событие) { alert ("Обработчик для вызова .submit()."); event.preventDefault(); }); что-то вроде этого может быть проще –

Смежные вопросы