2010-01-07 109 views
1

通过单击它可以在<li>上设置类。现在,一个嵌套元素(<button>)不会从其父项中移除该类。嵌套元素不会删除父类

在此先感谢。

$(document).ready(function() { 
     $('.pickOne li').click(function() { 
     $(this).addClass('active'); 
     }); 

     $('.settingsCancelBtn').click(function() { 
     $(this).parent().parent().removeClass('active'); 
     }); 
    }); 

和HTML是像这样:

<div class="fromCamp pickOne four"> 
       <ul class="four"> 
        <li class="first bus"><a href="#" alt="By Bus"></a> 
         <div> 
          <p class="cmInfo">Arrive between 9 AM and 11 AM. Read these <a href="#">additional instructions</a>. <a href="#">Driving Directions</a></p> 
          <p><a href="#">Tilefishes</a></p> 
          <p><a href="#">Bluefishes</a></p> 
          <p><a href="#">Tigerfishes</a></p> 
          <button class="cmCancelDeleteButton settingsCancelBtn" type="button">Cancel</button> 
          <button class="cmGoButton settingsSaveBtn" type="button">Save</button> 
         </div> 
        </li> 
        <li class="second car"><a href="#" alt="By Car"></a> 
         <div> 
          <p><a href="#">Remoras</a></p> 
          <p><a href="#">Tilefishes</a></p> 
          <p><a href="#">Bluefishes</a></p> 
          <p><a href="#">Tigerfishes</a></p> 
          <button class="cmCancelDeleteButton settingsCancelBtn" type="button">Cancel</button> 
          <button class="cmGoButton settingsSaveBtn" type="button">Save</button> 
         </div> 
        </li> 
        <li class="third plane"><a href="#" alt="By Plane"></a> 
         <div> 
          <p class="cmInfo">Arrive between 9 AM and 11 AM. Read these <a href="#">additional instructions</a>. <a href="#">Driving Directions</a></p> 
          <p><a href="#">Tilefishes</a></p> 
          <p><a href="#">Bluefishes</a></p> 
          <p><a href="#">Tigerfishes</a></p> 
          <button class="cmCancelDeleteButton settingsCancelBtn" type="button">Cancel</button> 
          <button class="cmGoButton settingsSaveBtn" type="button">Save</button> 
         </div> 
        </li> 
        <li class="fourth stayOver"><a href="#" alt="Staying Over"></a> 
         <div> 
          <p><a href="#">Remoras</a></p> 
          <p><a href="#">Tilefishes</a></p> 
          <p><a href="#">Bluefishes</a></p> 
          <p><a href="#">Tigerfishes</a></p> 
          <button class="cmCancelDeleteButton settingsCancelBtn" type="button">Cancel</button> 
          <button class="cmGoButton settingsSaveBtn" type="button">Save</button> 
         </div> 
        </li> 
       </ul> 
      </div> 
      <div class="cmClear"></div> 
     </div> 

回答

5

好,这里是正在发生的事情:

因为您的按钮中所含LI,当你按一下按钮,它消除了类,然后将事件继续传播,并重新应用类。

所以它是删除;它只是立即重新应用。所以加上

// Dont forget to put the e in function() 
    $('.settingsCancelBtn').click(function(e) { 
    $(this).parent().parent().removeClass('active'); 

    // This is the new line! 
    e.stopPropagation(); 
    }); 
+0

不知道我是如何错过了。大抓住埃里克,并很好的解决方案...我会+1,但我今天失去了投票:( – 2010-01-07 19:56:56

+0

我甚至不知道你可以用完票= x – Erik 2010-01-07 20:11:47

+0

哇,不能相信别人有过完全相同的问题,完全相同的解决方案。伟大的,埃里克! – 2012-05-31 02:57:14

0

所以分钟,我张贴了这个之后,我的朋友提出了一个解决方案。断点...谁知道。 :)

因为我最初选择<li>,当我点击它的一个孩子去除活动类时,它删除它,然后立即再次添加它。

解决的办法是选择<li><a>最初(它设置为display:block并覆盖同一空间的li一样。)

愚蠢的我。

$(document).ready(function() { 
     $('.pickOne li a ').click(function() { 
     $(this).parent().addClass('active'); 
     }); 

     $('.settingsCancelBtn').click(function() { 
     $(this).parent().parent().removeClass('active'); 
     }); 
    }); 
+0

aww你发布了这个权利之前我为你解决了它!它是JS中的一个常见错误 - 请记住,事件继续向外传播,直到你抓住它,扣住它,然后用锤子反复击打它的头......呃......我的意思是直到你停下来。 – Erik 2010-01-07 19:53:03

+0

谢谢你!我想这是一个很好的学习经验。暴力是我想的答案。 :) – 2010-01-07 20:52:50