2014-03-30 73 views
1

我有四个选项,如果有人选择一个选项并点击“nästa”,答案应该存储到一个数组中。为了确保值已经存储,我提醒了阵列的长度。但是,如果我点击“Visa alla alternativ”并选择另一个问题,再次单击“nästa”,长度将增加1。反应错误的点击功能

  1. 第一次尝试:警报将显示1
  2. 第二次尝试:警报将显示1个新的警告窗口将 显示2.
  3. 第三次尝试:它会显示1,2,3。

这是怎么发生的?

Javascript:

var answer = [];

$(".option").on("click", click_question); 

     function click_question() { 


     $(".option").each(function() { 
      $(this).fadeTo("slow", 0.1); 
      $(this).off("click"); 
     }); 



     function store_asnwer() { 
      $("#nästa").click(function() { 
      answer.push(select); 
      alert(answer.length); 

     }); 
     } 

     $(this).fadeTo("slow", 1); 

     $("#nästa").fadeTo("slow", 1); 
     $("#visa_alternativ").fadeTo("slow", 1); 

     store_asnwer(); 

     return select = $(this).text(); 
     } 

     $("#visa_alternativ").on("click", function() { 
      $(".option").each(function() { 
       $(this).fadeTo("slow", 1); 
       $(this).on("click", click_question); 
      }); 

      answer.splice(0,1); 

      $(this).fadeTo("slow", 0.2); 
     }); 
HTML: 


<div class="option" id="option_1"> Svars alternativ_1 </div> 
<div class="option" id="option_2"> Svars alternativ_2 </div>       <div class="option" id="option_3"> Svars alternativ_3 </div> 
<div class="option" id="option_4"> Svars alternativ_4 </div> 

<div class="question_nästa" id="nästa"> Nästa </div> 
<div class="question_nästa" id="tillbaka_question"> Tillbaka </div> 
<div class="question_nästa" id="visa_alternativ"> Visa alla alternativ </div> 

感谢您的帮助!

我希望如果我能得到解决

+2

这就是通常当你开始添加事件处理内部事件处理程序发生了什么和循环等,新的事件处理程序被添加每次,它只是不断堆积如山。 – adeneo

+1

发布一个容易跟踪错误的提琴。 –

+0

如何避免每次添加处理程序时都如您所说。 – user3478007

回答

0

您在.option元素的每次点击附加一个单击事件处理程序#nästa,所以将全部解雇。附加一次处理程序。当您单击某个选项时,将其值存储在一个变量中并将其插入到点击功能中。

代码:

var answer = []; 
var selected; 

$(".option").on("click", click_question); 

$("#nästa").click(function() { 
    answer.push(selected); 
    alert(answer.length); 
}); 

function click_question() { 

    $(".option").each(function() { 
     $(this).fadeTo("slow", 0.1); 
     $(this).off("click"); 
    }); 

    $(this).fadeTo("slow", 1); 

    $("#nästa").fadeTo("slow", 1); 
    $("#visa_alternativ").fadeTo("slow", 1); 

    selected = $(this).text(); 
} 

$("#visa_alternativ").on("click", function() { 
    $(".option").each(function() { 
     $(this).fadeTo("slow", 1); 
     $(this).on("click", click_question); 
    }); 

    answer.splice(0, 1); 

    $(this).fadeTo("slow", 0.2); 
}); 

演示:http://jsfiddle.net/IrvinDominin/PDc7b/

+0

哦,所以我不应该把“nästa”.click函数放到click_question()中? – user3478007

+0

不,在这种情况下,你将附加一个点击处理程序在每个选项点击,你会面临的问题 –

+0

但我已经改变了改变,它正在工作,但是我把“nästa”.click里面的click_question的原因是使“nästa”按钮才能正常工作,我的意思是一旦我们选择了一个选项就可以点击。如何使它成为点击功能仅在点击选项时才起作用? – user3478007