2015-06-08 3 views
2

У меня есть возрастное значение, которое я использую как условие для ввода инструкции IF. Оператор IF заполняет случайные значения в поле (это математическая игра для детей). После заполнения полей пользователь может ввести свои ответы, а затем проверить их, используя кнопку «Проверить ответы». После запуска блока «Проверить ответы» IF-оператор снова запускается (!), Что приводит к изменению математических проблем - создаются новые случайные значения.запускать инструкцию IF после

Как я могу предотвратить выполнение оператора IF после того, как страница уже загружена; вызывая изменение значений при каждом нажатии кнопки «Проверить ответы»?

Вот это отношение JavaScript:

$(document).ready(function() { 
    var getAge = localStorage.getItem('setAge'); 

    var userResponse = new Array(); 
    var answer = new Array(); 

    if (getAge >= 1 && getAge <= 7) { 
     var operator = new Array('+', '-'); 

     for (var counter = 0; counter <= 2; counter++) { 
      var index = Math.round(Math.random()); 
      var1 = Math.floor((Math.random() * 5) + 1); 
      var2 = Math.floor((Math.random() * 10) + 1); 

      // these add the values to the mathQuestions.aspx 
      $('#a' + counter).text(var1); 
      $('#b' + counter).text(operator[index]); 
      $('#c' + counter).text(var2); 

      answer[counter] = eval(var1 + operator[index] + var2); 
     } 

    // this stores the users answers in userResponse[] 
    for (var counter = 0; counter <= 2; counter++) { 
     $('#d' + counter).change(function() { 
      for (var counter = 0; counter <= 2; counter++) { 
       userResponse[counter] = $('#d' + counter).val(); 
       // window.alert("userResponse = " + userResponse[counter]); 
      } 
     }); 
    } 

    // Button3 = 'Check Answers' 
    $('#Button3').click(function() { 
     for (var counter = 0; counter <= 2; counter++) { 
      window.alert('userResponse after checking the answers = ' + userResponse[counter]); 

      if (answer[counter] != userResponse[counter]) { 
       $('#span' + counter).val(answer[counter]); 
      } 
     } 
    }); 
}); 

Я все еще учусь все это, так что я мог бы иметь другие ошибки, которые вносят свой вклад в моей проблеме. Насколько я знаю, проблема с корнем вызвана повторением оператора IF. Кроме того, в случае, если это актуально, я использую Visual Studio Express 2012 для Интернета, используя некоторые элементы управления ASP (таблица, кнопки, ввод и т. Д.).

+1

он должен работать только один раз, когда нагрузка страницы завершена, а затем не раз. если вы действительно этого хотите, вы можете установить контрольную переменную, например. 'var already_ran = false;', затем установите значение true после завершения if(). –

ответ

0

Я полагаю, что проблема не в коде, который вы опубликовали, а в вашем HTML; На основе кода, который вы опубликовали, есть событие click, но это никогда не приведет к повторному запуску части «randomize».

Может быть, что ваш HTML выглядит следующим образом:

<form> 
<button>Check answers</button> 
</form> 

или

<form> 
<input type="submit" value="Check answers"> 
</form> 

Имея button или submit внутри результатов форм-атрибутов в 'Submit-действие', когда вы нажмете кнопка. В результате вы сначала видите сообщение-предупреждение из события click. Затем страница перезагружается, и весь сценарий document.ready() будет выполнен снова.

Простое решение может быть:

$('#Button3').click(function (event) { 
    event.preventDefault() 
    /* ... */ 
} 

Это останавливает форму от представления.

http://api.jquery.com/event.preventdefault/

+0

Wouter ты был совершенно прав. Это было «подача-действие», на которое вы ссылались. Вам повезло, что мы не близки друг другу, или я бы поцеловал ваш рот открытым ртом. Я боролся с этим в течение нескольких дней. Огромное спасибо!! (просто шутит о частице открытого сна) – RunzWitScissors

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

  • Нет связанных вопросов^_^