2017-12-14 11 views
1

動的に作成された行を持つテーブルがあります。最後の列のすべての行で、ボタンを押したその行の下の非表示行を表示/非表示にするボタンが必要です。PHP/jQuery - テーブル内のすべての行のセルでスクリプトが機能しない

私はコードを持っていますが、最初の行と次の行で反応することなくShow/Hideボタンを操作します。ここで

は私のコードです:

<!DOCTYPE html> 
<html> 
<head> 
    <script type="text/javascript" src="jquery-1.9.1.js"></script> 
    <script> 
    $(function() { 
     $('#show_more').on('click',function(){ 
      var id_item = $(".btn").attr("id-data"); 
      $('.hidden_row_'+id_item).addClass('hidden_row_sh').removeClass('hidden_row_hide'); 
      $("#wh_tbl tr.hidden_row_"+id_item).fadeIn(400); 
      $(this).hide(); 
      $('#show_less').show(); 
     }); 
     $('#show_less').on('click',function(){ 
      var id_item = $(".btn").attr("id-data"); 
      $('.hidden_row_'+id_item).addClass('hidden_row_hide').removeClass('hidden_row_sh'); 
      $("#wh_tbl tr.hidden_row_"+id_item).fadeOut(400); 
      $(this).hide(); 
      $('#show_more').show(); 
     }); 
    }); 
    </script> 
    <style> 
    table.ranking-table, tr, td, th { 
     border-collapse:collapse; 
    } 
    .hidden_row_hide { 
     display:none; 
    } 
    .hidden_row_sh { 
     display:table-row; 
    } 
    #show_more .sign:after { 
     content:"⇩"; 
    } 
    #show_less .sign:after { 
     content:"⇧"; 
    } 
    button.btn { 
     font-weight: bold; 
     color: #666; 
     width:100%; 
     background:none; 
     border:none; 
    } 
    button.btn:focus { 
     outline:0; 
    } 
    </style> 
</head> 
<body> 

<table id="wh_tbl" class="ranking-table" border="1"> 
    <thead> 
     <tr> 
      <th>#</th> 
      <th style="text-align:center;">th_col2</th> 
      <th style="text-align:center;">th_col3</th> 
      <th style="text-align:center;">th_col4</th> 
      <th style="text-align:center;">th_col5</th> 
      <th style="text-align:center;">th_col6</th> 
      <th style="text-align:center;">th_col7</th> 
     </tr> 
    </thead> 
    <tbody> 
    <?php 
    for($i = 0; $i <= 10; $i++) 
    { 
     echo ' 
     <tr> 
      <td>'.$i.'</td> 
      <td style="text-align:center;">Text_'.$i.'</td> 
      <td style="text-align:center;">data_'.$i.'</td> 
      <td style="text-align:center;">web_'.$i.'</td> 
      <td style="text-align:center;">xxx_'.$i.'</td> 
      <td style="text-align:center;">yyy_'.$i.'</td> 
      <td style="text-align:center;"> 
       <div id="show_more"> 
        <button class="btn" id-data="'.$i.'" >Pokaż <span class="sign"></span></button> 
       </div> 
       <div id="show_less" class="hidden_row_hide"> 
        <button class="btn" id-data="'.$i.'" >Ukryj <span class="sign"></span></button> 
       </div> 
      </td> 
     </tr> 
     <tr class="hidden_row_'.$i.' hidden_row_hide"> 
      <td></td> 
      <td>col'.$i.'1</td> 
      <td>col'.$i.'2</td> 
      <td>col'.$i.'3</td> 
      <td>col'.$i.'4</td> 
      <td>col'.$i.'5</td> 
      <td>col'.$i.'6</td> 
     </tr>'; 
    } 
    ?> 
    </tbody> 
</table> 
</body> 
</html> 
+1

IDは、文書の文脈 –

+1

に一意である必要がありますあなたが必要要素ごとに一意の「id」を持つようにします。 –

答えて

1

あなたは要素ごとにユニークなidを持っているので、以下のようにclassidを変更する必要があります: -

<!DOCTYPE html> 
<html> 
<head> 
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
    <script> 
    $(function() { 
     $('.show_more').on('click',function(){ 
      $(this).closest('tr').next('tr').removeClass('hidden_row_hide'); 
      $(this).hide(); 
      $(this).next('.show_less').show(); 
     }); 
     $('.show_less').on('click',function(){ 
      $(this).closest('tr').next('tr').addClass('hidden_row_hide'); 
      $(this).hide(); 
      $(this).prev('.show_more').show(); 
     }); 
    }); 
    </script> 
    <style> 
    table.ranking-table, tr, td, th { 
     border-collapse:collapse; 
    } 
    .hidden_row_hide { 
     display:none; 
    } 
    .hidden_row_sh { 
     display:table-row; 
    } 
    .show_more .sign:after { 
     content:"⇩"; 
    } 
    .show_less .sign:after { 
     content:"⇧"; 
    } 
    button.btn { 
     font-weight: bold; 
     color: #666; 
     width:100%; 
     background:none; 
     border:none; 
    } 
    button.btn:focus { 
     outline:0; 
    } 
    </style> 
</head> 
<body> 

<table id="wh_tbl" class="ranking-table" border="1"> 
    <thead> 
     <tr> 
      <th>#</th> 
      <th style="text-align:center;">th_col2</th> 
      <th style="text-align:center;">th_col3</th> 
      <th style="text-align:center;">th_col4</th> 
      <th style="text-align:center;">th_col5</th> 
      <th style="text-align:center;">th_col6</th> 
      <th style="text-align:center;">th_col7</th> 
     </tr> 
    </thead> 
    <tbody> 
    <?php 
    for($i = 0; $i <= 10; $i++) 
    { 
     echo ' 
     <tr> 
      <td>'.$i.'</td> 
      <td style="text-align:center;">Text_'.$i.'</td> 
      <td style="text-align:center;">data_'.$i.'</td> 
      <td style="text-align:center;">web_'.$i.'</td> 
      <td style="text-align:center;">xxx_'.$i.'</td> 
      <td style="text-align:center;">yyy_'.$i.'</td> 
      <td style="text-align:center;"> 
       <div class="show_more"> 
        <button class="btn" id-data="'.$i.'" >Pokaż <span class="sign"></span></button> 
       </div> 
       <div class="show_less hidden_row_hide"> 
        <button class="btn" id-data="'.$i.'" >Ukryj <span class="sign"></span></button> 
       </div> 
      </td> 
     </tr> 
     <tr class="hidden_row_'.$i.' hidden_row_hide"> 
      <td></td> 
      <td>col'.$i.'1</td> 
      <td>col'.$i.'2</td> 
      <td>col'.$i.'3</td> 
      <td>col'.$i.'4</td> 
      <td>col'.$i.'5</td> 
      <td>col'.$i.'6</td> 
     </tr>'; 
    } 
    ?> 
    </tbody> 
</table> 
</body> 
</html> 
関連する問題