Javascript 2 функции для onClick - PullRequest
3 голосов
/ 16 марта 2011

Здравствуйте, я новичок в Javascript, поэтому, пожалуйста, потерпите меня. У меня есть викторина Javascript, которая собирает ответы и отображает счет в конце викторины. Оценка рассчитывается по событию команды onClick в конце формы, которую я хотел бы затем проанализировать для отслеживания событий в Google Analytics. В тот момент, когда нажата кнопка, если я попытаюсь проанализировать значение оценки для аналитики, она не будет работать. Точно такой же метод работает, если переменная является другим определенным целым числом (с фиксированным значением).

Вот мой код:

var numQues = 5;    
var numChoi = 3;   
var url = location.href;  
var score = 0;  
var answers = new Array(5);  
answers[0] = "Play your pet a CD";  
answers[1] = "National PetLog database";  
answers[2] = "Certain types of cancers";  
answers[3] = "A few weeks";  
answers[4] = "Up to 1 year";  

function getScore(form) {  
 score = 0;  
  var currElt;  
  var currSelection;  

  for (i=0; i<numQues; i++) {  
    currElt = i*numChoi;  
    for (j=0; j<numChoi; j++) {  
      currSelection = form.elements[currElt + j];  
      if (currSelection.checked) {  
        if (currSelection.value == answers[i]) {  
          score++;  
          break;  
        }  
      }  
    }  
  }  
  form.score.value = score + "/" + numQues;  
  var correctAnswers = "";  
  for (i=1; i<=numQues; i++) {  
    correctAnswers += i + ". " + answers[i-1] + "\r\n";  
  }  
  form.solutions.value = correctAnswers;  


}  

function JavaScriptFunction(){  
  return(score);  
}

и кнопка:

<input class="ScoreButton" onclick="getScore(this.form); pageTracker._trackEvent('Quiz', 'Petcare quiz', url, score);" type="button" value="Get score" />

Любая помощь будет высоко ценится. Благодарю.

Ответы [ 3 ]

2 голосов
/ 16 марта 2011

Поскольку вы говорите, что вы новичок в JavaScript, я бы настоятельно рекомендовал использовать хорошую библиотеку JavaScript, такую ​​как jQuery, YUI, Dojo, Prototype и т. Д. Существует очень хороший выбор хороших библиотек.Такая библиотека значительно упростит ваше взаимодействие с DOM и моделями событий браузера.Я только рекомендую , а не , используя библиотеку JavaScript для людей, которые имеют большой опыт работы с JavaScript, DOM и всеми особенностями и несовместимостью браузера.

Если вы не хотите использоватьпо какой-то причине, затем прочитайте это:

Какие эмпирические технические причины не использовать jQuery?

0 голосов
/ 16 марта 2011

Вместо использования атрибута onclick вы должны использовать обработчики событий.

<input id="score-button" type="button" value="Get Score">

Тогда в javascript ...

var scoreButton = document.getElementById('score-button');
scoreButton.addEventListener('click', myFuncOne(), false);
scoreButton.addEventListener('click', myFuncTwo(), false);

Конечно, как уже упоминалось в других предложениях, выдействительно следует использовать библиотеку javascript, такую ​​как jQuery, которая предоставляет множество инструментов, облегчающих вашу жизнь.

В jQuery приведенный выше код может быть коротким, как ...

$('#score-button').click(function() {
  myFuncOne();
  myFuncTwo();
});
0 голосов
/ 16 марта 2011

Вы не отправляете значение на трекер, попробуйте это:

<input class="ScoreButton" onclick="doStuff(this.form);" type="button" value="Get score" />

Редактировать:

function getScore(form) {  
 score = 0;  
  var currElt;  
  var currSelection;  

  for (i=0; i<numQues; i++) {  
    currElt = i*numChoi;  
    for (j=0; j<numChoi; j++) {  
      currSelection = form.elements[currElt + j];  
      if (currSelection.checked && currSelection.value == answers[i]) {  
          score++;  
          break;  
      }  
    }  
  }

  return score;  
}

function doStuff(form){
   //calculate score
   score = getScore(form);

   //replace value
   form.score.value = score + "/" + numQues;  

   //correct answers
   var correctAnswers = "";  
   for (i=1; i<=numQues; i++) {  
     correctAnswers += i + ". " + answers[i-1] + "\r\n";  
   }  
   form.solutions.value = correctAnswers;  

   //send data to track
   pageTracker._trackEvent('Quiz', 'Petcare quiz', url, score);
}

Редактировать: Я немного переработал ваш код.Может быть, этот способ работает или может найти, где находится ошибка.

...