2015-07-04 6 views
0

Я пробовал все, что пересеклось с моим мнением, но не повезло с этим циклом (хотя я довольно новичок в javascript).
Запрос должен задать вопрос до тех пор, пока ничего не будет введено. В этот момент все «результаты», которые были ранее введены, должны быть взяты и обработаны. Результат должен выглядеть так: (если введен для первого запроса: «CS A 4», 2-й «BB B 3», 3-й «CC C 3» ..): .... показывается только после того, как не было записи для n-го приглашенияJavascript Loop - не могу понять это из

COURSE GRADE HOURS 
CS  A  4 
BB  B  3 
CC  C  3 

<!doctype html> 
<html> 
<head> 
    <meta charset="UTF-8"> 
    <title>gpa.html</title> 
</head> 
<script type="text/javascript"> 
    function getData(){ 
     var input=0, 
      results=[]; 

     while(input!==""){input = prompt("Enter course name, grade and credit hours (e.g., 'CS3520 A 4' or click OK with no data to terminate."); 
     input = input.split(" "); 
     if(input==""){ 
     results.push({ 
      course: input[0].trim(), 
      grade: input[1].trim(), 
      creditHours: parseInt(input[2], 10) 
     });}} 
     return results;   
    } 

    var app = function() { 
     var result, results, 
     COLUMN_SEPARATOR = "\t\t"; 

     document.writeln("<pre>"); 
     results = getData(); 

     document.writeln("COURSE" + COLUMN_SEPARATOR + "GRADE" + COLUMN_SEPARATOR + "HOURS"); 
     for (var i = 0, j = results.length; i < j; i++) { 
      result = results[i]; 

      document.writeln(result.course + COLUMN_SEPARATOR + result.grade + COLUMN_SEPARATOR + result.creditHours); 
     } 

     document.writeln(); 
     computeGPA(results); 
     document.writeln("</pre>");  
    } 

window.onload = app; 

</script> 
<body> 
</body> 
</html> 
+0

Где, тем не менее, вы получаете этот цикл? –

+0

не должен 'if (input ==" ") {' в вашей функции 'getData' быть чем-то вроде строк' if (input.length) {'? Я не думаю, что ваше текущее заявление всегда будет правдой. –

ответ

1

Удалены (ниже раскола): if(input=="")

Добавлено (над расколом): if (input === "") { break; }

Это следует сделать это:

function getData() { 
    var input = 0, 
     results = []; 

    while (input !== "") { 
     input = prompt("Enter course name, grade and credit hours (e.g., 'CS3520 A 4' or click OK with no data to terminate."); 
     if (input === "") { break; } 
     input = input.split(" "); 

     results.push({ 
      course: input[0].trim(), 
      grade: input[1].trim(), 
      creditHours: parseInt(input[2], 10) 
     }); 

    } 
    return results; 
} 



var app = function() { 
    var result, results, 
    COLUMN_SEPARATOR = "\t\t"; 

    document.writeln("<pre>"); 
    results = getData(); 

    document.writeln("COURSE" + COLUMN_SEPARATOR + "GRADE" + COLUMN_SEPARATOR + "HOURS"); 
    for (var i = 0, j = results.length; i < j; i++) { 
     result = results[i]; 

     document.writeln(result.course + COLUMN_SEPARATOR + result.grade + COLUMN_SEPARATOR + result.creditHours); 
    } 

    document.writeln(); 
    document.writeln("</pre>"); 
} 

Но я думаю, что это было бы еще лучше решение:

function getData() { 
    var input = true, 
     results = []; 

    while (input) { 
     input = prompt("Enter course name, grade and credit hours (e.g., 'CS3520 A 4' or click OK with no data to terminate."); 
     if (!input) { break; } 
     input = input.split(" "); 

     results.push({ 
      course: input[0].trim(), 
      grade: input[1].trim(), 
      creditHours: parseInt(input[2], 10) 
     }); 

    } 
    return results; 
} 

var app = function() { 
    var result, results, 
    COLUMN_SEPARATOR = "\t\t"; 

    document.writeln("<pre>"); 
    results = getData(); 

    document.writeln("COURSE" + COLUMN_SEPARATOR + "GRADE" + COLUMN_SEPARATOR + "HOURS"); 
    for (var i = 0, j = results.length; i < j; i++) { 
     result = results[i]; 

     document.writeln(result.course + COLUMN_SEPARATOR + result.grade + COLUMN_SEPARATOR + result.creditHours); 
    } 

    document.writeln(); 
    document.writeln("</pre>"); 
} 

Поскольку значение возврата отмененного запроса() зависит от браузера. В большинстве браузеров возвращаемое значение равно null. Однако некоторые очень старые браузеры (например, ранние версии IE) использовали для возврата '' (пустая строка).

Так что вместо использования чего-то вроде if (input != '' && input != null), просто используйте true или false.

Пользователь нажал OK, но поле ввода было пусто input === ""

Пользователь напечатал что-нибудь и нажмите OK (или введите) input == true

Пользователь нажал ОТМЕНА input == null или input == ""

UPDATE

Об textarea вещь, попробуйте что-то вроде этого (я не тестировал i t):

textareaContentByLines = textareaContent.split("\n"); 

for(index = 0; index < textareaContentByLines.length; index++){ 
    input = textareaContentByLines.split(" "); 
    results.push({ 
       course: textareaContentByLines[index][0].trim(), 
       grade: textareaContentByLines[index][1].trim(), 
       creditHours: parseInt(textareaContentByLines[index][2], 10) 
      }); 
} 
+1

Thnx, работал как шарм !! –

+0

@peter Хм, еще одна вещь, если я могу спросить :-). Подобный сценарий, как и выше, если у меня есть текстовая область вместо приглашения, и каждый курс, класс и часы разделены новой строкой, как я могу читать и создавать курсы субари, класс, часы из каждой строки и использовать их позже для других вещи. –

+0

PLS прочитать предыдущий комментарий –

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