2012-04-02 49 views
0

在我的函數中,雖然我將click事件添加到對象,即調用兩次。我發現沒有。解決方案的形式,但沒有任何幫助。jquery單擊事件調用2次

任何人都可以幫我解決這個問題嗎?

我的代碼:

function accordionOptions(AccordionBox, AccordionSec) { 
    var accordionBox = AccordionBox, 
     accordionSec = AccordionSec; 

    $.each(accordionSec, function (i, values) { 
     $('h3', values).each(function() { 
      $(this).unbind('click').bind('click', function() { 
       $(this).toggleClass('selected').siblings('.expand-area').slideToggle().end().parent().siblings().children('h3').removeClass('selected').siblings('.expand-area').slideUp(); 

       var subSec = $(this).parent().children().find('.subSec'); 

       $(subSec).click(function() { 
        console.log(this.tagName); // i am getting 2 times...why? 
       }) 

      }); 
     }) 
    }) 

} 

$(document).ready(function() { 
    var accordionBox = $('#Accordion'), 
     accordionSec = { 
      accorIndice: $('#sec1', '#Accordion'), 
      accorGeography: $('#sec2', '#Accordion'), 
      accorAllIndia: $('#sec3', '#Accordion') 
     } 
    accordionOptions(accordionBox, accordionSec); 
}); 

這是很長的HTML,所以我unabale在這裏放置。對不起

HTML的某些部分:

<ul class='subSec'> 
    <li> 
     <h4>1. Select a key index</h4> 
    </li> 
    <li> 
     <label> 
      <input type="radio" value="CCI" name="cci" checked>Consumer Confidence Index</label> 
    </li> 
    <li> 
     <label> 
      <input type="radio" value="HW" name="cci">Housewives Index</label> 
    </li> 
</ul> 
<ul class='subSec'> 
    <li> 
     <h4>2. Select your sub-indices (optional)</h4> 
    </li> 
    <li> 
     <label> 
      <input type="radio" value="CSI" name="subIndices">Consumer Spending Index</label> 
    </li> 
    <li> 
     <label> 
      <input type="radio" value="EI" name="subIndices">Employment Index</label> 
    </li> 
    <li> 
     <label> 
      <input type="radio" value="Ii" name="subIndices">Inflation Index</label> 
    </li> 
    <li> 
     <label> 
      <input type="radio" value="OI" name="subIndices">Onion Index</label> 
    </li> 
    <li> 
     <label> 
      <input type="radio" value="CI" name="subIndices">Corruption Index</label> 
    </li> 
</ul> 
+0

確定應如何$。每()運行 – Chibuzo 2012-04-02 08:56:42

+0

讓我們看看你的HTML – musefan 2012-04-02 08:57:08

+0

@ 3gwebtrain正常的,因爲你加'class'的點擊裏面''的你h3'so必須點擊兩次,顯示click''log' – mgraph 2012-04-02 09:01:30

回答

0

如何return false;在點擊事件函數的結束?

0

我不認爲這是一個事件冒泡的問題,儘管它很可能會這麼想。

問題似乎是var subSec = $(this).parent().children().find('.subSec');多次發現相同的.subSec,因此不止一次地附加其點擊處理程序。

據我所知,你應該能夠與刪除$.each(accordionSec,function(i,values){...});包裝和附加功能,點擊您h3元素:

$('h3', context).each(function(){ 
    ... 
}); 

我不知道該context沒有看到更多的HTML,但你應該能夠解決這個問題。 (嘗試'#'+手風琴外包裝的ID)。

編輯:

哦,是的,你還需要從外部點擊處理程序中解放$(subSec).click(function() {...));,否則subSecs'點擊功能將被添加一遍又一遍,每次外點擊事件發生。

+0

不,在某些情況下,我有超過2個'.subSec'的實例,但它只調用2次。 – 3gwebtrain 2012-04-02 09:48:45

+0

仍然不確定這是答案,但看到我的編輯。 – 2012-04-02 10:04:10

+0

我不認爲這取決於'subSecs'的數量,而是'accordionSecs'的數量。 – 2012-04-02 10:07:16