【问题标题】:Jquery toggling incorrect element ID [closed]Jquery切换不正确的元素ID [关闭]
【发布时间】:2016-08-19 17:22:12
【问题描述】:

我有一个多项选择测验,有 5 个可能的点和一个二进制,是或否答案。

我对 jsPDF 和 html2canvas 感到很沮丧,所以我做了一个相当低效的解决方法,我希望它对我有用。

我为每个证书保存了一个单独的 pdf,并且可以通过 <a href="PDF.pdf" download> 访问它们。我知道这只是在大多数浏览器上打开 PDF,但这实际上或多或少是我想要的。

我认为我的困难在于我的 Jquery。 不管你得到什么分数,它默认切换第一个链接并给你证书,上面写着你得一分,然后对第二个问题说是。

这是 HTML。

<div class="answers">            
    <input type="radio" name="q1" id="q1a"><label for="q1a">option 1</label><br/><br/>          
    <input type="radio" name="q1" id="q1b"><label for="q1b">option 2</label><br/><br/>            

<div class="answers">            
    <input type="radio" name="q2" id="q2a"><label for="q2a">option 1</label><br/><br/>          
    <input type="radio" name="q2" id="q2b"><label for="q2b">option 2</label><br/><br/>            

<div class="answers">            
    <input type="radio" name="q3" id="q3a"><label for="q3a">option 1</label><br/><br/>          
    <input type="radio" name="q3" id="q3b"><label for="q3b">option 2</label><br/><br/>            

<div class="answers">            
    <input type="radio" name="q4" id="q4a"><label for="q4a">option 1</label><br/><br/>          
    <input type="radio" name="q4" id="q4b"><label for="q4b">option 2</label><br/><br/>            

<div class="answers">            
    <input type="radio" name="q5" id="q5a"><label for="q5a">option 1</label><br/><br/>          
    <input type="radio" name="q5" id="q5b"><label for="q5b">option 2</label><br/><br/>            

<div class="answers">            
    <input type="radio" name="qx" id="qxa"><label for="qxa">Praise the sun!</label><br/><br/>          
    <input type="radio" name="qx" id="qxb"><label for="qxb">Nope.</label><br/><br/>            

<p id="endButton"></p>

<button type="button" onclick="getScore();">Finish</button>

<br/>
<div class="cert" id="cert0n">
<a href="Cert 0n.pdf">Download my certificate!</a>
</div>
<div class="cert" id="cert0y">
<a href="Cert 0y.pdf">Download my certificate!</a>
</div>

<div class="cert" id="cert1n">
<a href="Cert 1n.pdf">Download my certificate!</a>
</div>
<div class="cert" id="cert1y">
<a href="Cert 1y.pdf">Download my certificate!</a>
</div>

<div class="cert" id="cert2n">
<a href="Cert 2n.pdf">Download my certificate!</a>
</div>
<div class="cert" id="cert2y">
<a href="Cert 2y.pdf">Download my certificate!</a>
</div>

<div class="cert" id="cert3n">
<a href="Cert 3n.pdf">Download my certificate!</a>
</div>
<div class="cert" id="cert3y">
<a href="Cert 3y.pdf">Download my certificate!</a>
</div>

<div class="cert" id="cert4n">
<a href="Cert 4n.pdf">Download my certificate!</a>
</div>
<div class="cert" id="cert4y">
<a href="Cert 4y.pdf">Download my certificate!</a>
</div>

<div class="cert" id="cert5n">
<a href="Cert 5n.pdf">Download my certificate!</a>
</div>
<div class="cert" id="cert5y">
<a href="Cert 5y.pdf">Download my certificate!</a>
</div>

“cert”类设置为display: none,以便切换允许它显示。

这里是 Javascript:

var totscore = 0;
var noanswer = 0;

var scores1 = [0, 1];
var scores2 = [0, 1];
var scores3 = [0, 1];
var scores4 = [0, 1];
var scores5 = [0, 1];

var praiseTheSun = 0

if(document.getElementById("q1a").checked){
    totscore += scores1[0];
} else if(document.getElementById("q1b").checked){
    totscore += scores1[1];
} else noAnswer = 1;

if(document.getElementById("q2a").checked){
    totscore += scores1[0];
} else if(document.getElementById("q2b").checked){
    totscore += scores1[1];
} else noAnswer = 1;

if(document.getElementById("q3a").checked){
    totscore += scores1[0];
} else if(document.getElementById("q3b").checked){
    totscore += scores1[1];
} else noAnswer = 1;

if(document.getElementById("q4a").checked){
    totscore += scores1[0];
} else if(document.getElementById("q4b").checked){
    totscore += scores1[1];
} else noAnswer = 1;

if(document.getElementById("q5a").checked){
    totscore += scores1[0];
} else if(document.getElementById("q5b").checked){
    totscore += scores1[1];
} else noAnswer = 1;

 if(document.getElementById("qxa").checked){
    praiseTheSun == 1
} else if(document.getElementById("qxb").checked){
    praiseTheSun == 0  
}else noAnswer = 1;

    if(noAnswer == 1){
    alert("At least one question was left unanswered above. Please ensure that all answers are complete.");
} else if(noAnswer == 0){
    alert("Your score is " + totscore + ".");
    if((totscore = 0) && (praiseTheSun = 1)){
        $("#cert0y").toggle();
    }else if((totscore = 0) && (praiseTheSun = 0)){
        $("#cert0n").toggle();

    }else if((totscore = 1) && (praiseTheSun = 1)){
        $("#cert1y").toggle();
    }else if((totscore = 1) && (praiseTheSun = 0)){
        $("#cert1n").toggle();

    }else if((totscore = 2) && (praiseTheSun = 1)){
        $("#cert2y").toggle();
    }else if((totscore = 2) && (praiseTheSun = 0)){
        $("#cert2n").toggle();

    }else if((totscore = 3) && (praiseTheSun = 1)){
        $("#cert3y").toggle();
    }else if((totscore = 3) && (praiseTheSun = 0)){
        $("#cert3n").toggle();

    }else if((totscore = 4) && (praiseTheSun = 1)){
        $("#cert4y").toggle();
    }else if((totscore = 4) && (praiseTheSun = 0)){
        $("#cert4n").toggle();

    }else if((totscore = 5) && (praiseTheSun = 1)){
        $("#cert5y").toggle();
    }else if((totscore = 5) && (praiseTheSun = 0)){
        $("#cert5n").toggle();
    }

我无法理解为什么,无论我得到什么分数,它都默认为 cert1y。

【问题讨论】:

  • 最后我看到你所有的if 语句都使用= 而不是== - 你正在分配值,这会搞砸一切。
  • if((totscore = 0) &amp;&amp; (praiseTheSun = 1)) 确保在比较时使用双倍或三倍 = 标记。您正在为 totscore 和 praiseTheSun 分配值,而不是比较它们。
  • 啊,谢谢。我总是搞砸我的逻辑。我想这是一个持续练习的问题。

标签: javascript jquery html pdf


【解决方案1】:

正如一些 cmets 所指出的,您在 if 语句中分配变量 (=) 而不是比较它们 (==)。所以这就是选择 cert1y 的原因:

第一个 if 将 totcore 设置为 0,将 preferTheSum 设置为 1,然后比较它们:(0 && 1) 为 false,以此类推到 else。

第二个 if 将 totcore 设置为 0,将 preferTheSum 设置为 0,然后比较它们:(0 && 0) 为 false,以此类推。

第三个 if 将 totcore 设置为 1,将 preferTheSum 设置为 1,然后比较它们:(1 && 1) 为真,因此 cert1y 被切换。

如果您了解如何在任何现代浏览器中使用脚本调试器,您就可以单步调试代码并实时看到这一点。

【讨论】:

    猜你喜欢
    • 2014-08-14
    • 2018-06-23
    • 2011-04-04
    • 1970-01-01
    • 2014-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多