2017-01-04 7 views
0

Я пытаюсь удалить класс в родительский td из дочернего элемента button через jQuery. Я могу удалить класс, когда внешний элемент tr нажат без проблем, но при попытке добавить класс обратно к родительскому td он ничего не делает. Когда отладка кажется сработавшей. Я пытаюсь сделать это, не перезагружая страницу, поэтому метод preventDefault на кнопке щелкнет. Любые идеи о том, что может вызвать проблему?Удаление класса в родительский элемент td с дочерней кнопкой

Мой HTML заключается в следующем:

<div class="panel panel-default"> 
<table id="order" class="table table-hover table-bordered"> 
    <thead class="table-header"> 
     <tr> 
     <th class="text-center"> 
      Order Number 
     </th> 
     <th class="text-center"> 
      Project Number 
     </th> 
     </tr> 
    </thead> 
    <tbody> 
     <tr class="click"> 
     <td id="orderNumber"> 
      1313 
     </td> 
     <td> 
      50 
     </td> 
     <td id="td1313" class="hidden"> 
      <div class="verify-box"> 
      <div class="window"> 
       <button class="close"> 
       X 
       </button> 
       <span class="title"> 
          Verify Order 
         </span> 
       <div class="panel panel-default"> 
       <table class="table table-hover table-bordered"> 
        <thead class="table-header"> 
        <tr> 
         <th> 
         Item Number 
         </th> 
         <th> 
         Item Description 
         </th> 
        </tr> 
       </thead> 
       <tbody> 
       <tr> 
        <td class="text-center"> 
        123456 
        </td> 
        <td class="text-center"> 
        Description 
        </td> 
       </tr> 
       </tbody> 
      </table> 
      </div> 
       <button class="btn btn-default" type="button"  onclick="window.print()"> 
       Print 
       </button> 
      </div> 
      </div> 
     </td> 
     </tr> 
    </tbody> 
    </table> 
</div> 

Вот JavaScript:

$('.click').on('click', function() { 
    var $td = $(this).find('#orderNumber'); 
    var td = "#td" + $td.text().trim(); 
    $(td).removeClass('hidden'); 
}); 

// Closes verification window 
$('.close').on('click', function(e) { 
    e.preventDefault(); 
    var $td = $(this).closest('td'); 
    $td.addClass('hidden'); 
}); 

Я также включая скрипку https://jsfiddle.net/tspuq9vo/3/

+1

.find() для поиска потомков, если элемент, который вы нажимаете, находится ниже элемента, который вы ищете, тогда вам нужно использовать .closest(). – MCMXCII

+0

Вы можете использовать .parent() для перемещения вверх по DOM, и вы можете связать его, так что вы можете сказать .parent(). Parent() например – Brad

+0

Вместо добавления класса 'hidden' do .hide(). '$ td.hide()' Использование '.show()' и '.hide()' обычно лучше работает для такого рода вещей. – nurdyguy

ответ

0

Вы установили класс щелчок на тр вызывает он должен быть запущен сразу после события click для кнопки закрытия.

Как быстро исправить вы можете остановить событие клика от распространяющегося с помощью

$('.click').on('click', function() { 
 
    var $td = $(this).find('#orderNumber'); 
 
    var td = "#td" + $td.text().trim(); 
 
    $(td).removeClass('hidden'); 
 
}); 
 

 
// Closes verification window 
 
$('.close').on('click', function(e) { 
 
    e.preventDefault(); 
 
    e.stopPropagation(); 
 
    var $td = $(this).closest('td'); 
 
    $td.addClass('hidden'); 
 
});

В противном случае вы должны действительно быть нацелены только на интерактивный TD-s непосредственно

+0

Спасибо, что имеют смысл ... При нажатии кнопки td вы стреляете из трл-клика !!! – adlais