2014-03-30 110 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