【问题标题】:Javascript 2 functions for onClickonClick 的 Javascript 2 函数
【发布时间】:2011-07-16 16:24:50
【问题描述】:

我是 Javascript 新手,所以请多多包涵。我有一个 Javascript 测验,它收集答案并在测验结束时显示分数。分数是根据表单末尾的“onClick”命令事件计算的,然后我想将其解析为事件跟踪到谷歌分析。目前,如果我尝试将分数的值解析为分析,则单击该按钮时,它将无法正常工作。如果变量是另一个定义的整数(具有固定值),则完全相同的方法确实有效。

这是我的代码:

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" />

任何帮助将不胜感激。

【问题讨论】:

    标签: javascript html dom-events


    【解决方案1】:

    既然你说你是 JavaScript 新手,那么我会强烈推荐使用好的 JavaScript 库,如 jQuery、YUI、Dojo、Prototype 等。有很多好的库可供选择。这样的库将大大简化您与 DOM 和浏览器事件模型的交互。我只向对 JavaScript、DOM 以及所有浏览器怪癖和不兼容问题非常有经验的人推荐不要使用 JavaScript 库。

    如果您出于某种原因不想使用库,请阅读以下内容:

    What are some empirical technical reasons not to use jQuery?

    【讨论】:

    • 我 100% 同意这个答案。我认为自己相当擅长 Javascript,但永远不会考虑在没有库的情况下使用它。它们让您的生活更轻松
    • 感谢您的回复。我已经尝试使用 Jquery 使用 jquizme 插件 (code.google.com/p/jquizme) 进行测验,但不幸的是无法让它与 Jquery 1.2.6 一起使用(我必须使用它,因为我无权访问 JQuery 库)。您知道是否有任何原因导致无法将 score 变量解析到事件跟踪中?可以将分数变量克隆到一个新变量中,然后将其拉入。无论如何,我将研究 JQuery 以获得相同的效果。谢谢,西蒙
    • @Simon:jQuery 1.2.6 已经快 3 岁了。对于一个已有 5 年历史的图书馆,至少可以说 很多。你是什​​么意思你无权访问 jQuery 库?
    • 有没有人使用过让他们的生活更轻松的 CMS?除了 WordPress,它们似乎都是为了一个目的而设计的:让开发者的生活陷入地狱。我的同情!
    • @DA:我认为它们旨在让最终用户的生活更轻松,而不是相关开发人员的生活。而且,为此,它们似乎工作得很好。如果只是因为任何事情来自定义它们需要最终用户聘请开发人员......
    【解决方案2】:

    您没有将值发送到跟踪器,试试这个:

    <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);
    }
    

    编辑:我对您的代码进行了一些重构。也许这种方式有效或可以找到错误所在。

    【讨论】:

    • 感谢您的回答。不幸的是,这摆脱了计算分值的功能。我需要那里的原始函数来计算分数,然后将计算出的值解析到分析中。
    • 我已更改您的分数函数以返回 score 值。现在应该可以了。
    • 感谢您的回答。我认为这是到了那里,但它似乎仍然没有从 getScore 函数中提取变量。如果重要的话,trackign 代码的第四个参数必须是一个整数。如果我用上面的按钮替换按钮,它不会执行 getScore 函数。
    • 好吧,我换成整数值了。你怎么知道代码没有被执行?
    • 我知道代码没有被执行,因为事件脚本在被点击时没有向分析发出任何 HTTP 请求。我尝试了返回分数;对于整数值,但它似乎只是不想将其放入事件跟踪中。但是,如果该值是静态数字而不是由 getScore 函数生成的数字,则它可以正常工作。它很奇怪。非常感谢您在这方面的帮助。
    【解决方案3】:

    您应该使用事件处理程序,而不是使用 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);
    

    当然,就像其他建议提到的那样,您确实应该使用 jQuery 等 JavaScript 库,它提供了许多让您的生活更轻松的工具。

    在 jQuery 中,上面的代码可以短到...

    $('#score-button').click(function() {
      myFuncOne();
      myFuncTwo();
    });
    

    【讨论】:

    • 感谢您的回复。不幸的是,我无法让事件侦听器工作/启动该功能。我可能很愚蠢,但我对 Javascript 有点陌生,通常我会尝试使用 Jquery,但没有这样做。希望我现在有。
    猜你喜欢
    • 2021-08-22
    • 1970-01-01
    • 1970-01-01
    • 2010-11-06
    • 2017-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多