2012-04-02 46 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