即使在AJAX加载时也隐藏基于复选框状态的表tr

时间:2018-01-26 09:25:23

标签: javascript jquery html ajax onchange

我想隐藏 tr> tr类为td的表status-locked如果复选框为检查

我有一张看起来像这样的桌子。它使用Ajax加载器从数据库加载数据,因此如果它超过4个产品,则会有第2页链接。如果单击第2页链接,则使用AJAX加载数据。该表仅根据来自数据库的AJAX加载数据获取新数据。

<input type="checkbox" id="product-toggle"  style="border: 1px  #000; background-color: #000;">

<table>
  <tr>
    <td class="status-locked">text</td>
    <td>text</td>
    <td>text</td>
    <td class="status-locked">text</td>
  </tr>
</table>
<button>1</button> <button>2</button>

现在我使用 jquery 隐藏tr td class="status-locked"并且有效。

&#13;
&#13;
$(document).ready(function () {
$('#product-toggle').change(function(){
  if($(this).prop("checked")) {
     $('tr:has(td.status-locked)').hide();
  } else {
    $('tr:has(td.status-locked)').show();
  }
});
});
&#13;
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
  </head>
 <body> 
<input type="checkbox" id="product-toggle"  style="border: 1px  #000; background-color: #000;">

    <table>
      <tr>
        <td>hide</td>
        <td>hide</td>
        <td>hide</td>
        <td class="status-locked">hide</td>
      </tr>
      <tr>
        <td>text</td>
        <td>text</td>
        <td>text</td>
        <td>text</td>
      </tr>
      <tr>
        <td>hide</td>
        <td>hide</td>
        <td>hide</td>
        <td class="status-locked">hide</td>
      </tr>
    </table>
    <button>1</button> <button>2</button>
</body>
</html>
&#13;
&#13;
&#13;

问题是指AJAX从database加载新数据并选中tr&gt; td&gt; class="status-locked"复选框示出了?

我希望隐藏tr td class="status-locked" $(function(){ $('#product-toggle') .prop('checked', localStorage.input === 'true') .on('change', function() { localStorage.input = this.checked; if (localStorage.input === 'true') { $('tr:has(td.status-locked)').hide(); } }) .trigger('change'); }); ,除非取消选中复选框。

此Jquery适用于页面刷新,但不适用于AJAX表加载:

implementation 'com.google.guava:guava:23.0-android'

3 个答案:

答案 0 :(得分:1)

尝试将逻辑分开:

$( document ).ready(function () {
    toggleRow();
    $('#product-toggle').on('change', toggleRow);
});

function toggleRow() {
    if( $('#product-toggle').prop("checked") ) {
         $('tr:has(td.status-locked)').hide();
    } else {
        $('tr:has(td.status-locked)').show();
    }
}

然后使用每个ajax请求后将调用的.ajaxComplete()方法:

$( document ).ajaxComplete(function() {
  toggleRow();
});

答案 1 :(得分:0)

您没有在选择器中选择td元素。尝试使用$('tr td.status-locked')

&#13;
&#13;
$(document).ready(function () {
$('#product-toggle').change(function(){
  if($(this).prop("checked")) {
     $('tr td.status-locked').hide();
  } else {
    $('tr td.status-locked').show();
  }
});
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<input type="checkbox" id="product-toggle">
    <table>
      <tr>
        <td>hide</td>
        <td>hide</td>
        <td>hide</td>
        <td class="status-locked">hide</td>
      </tr>
      <tr>
        <td>text</td>
        <td>text</td>
        <td>text</td>
        <td>text</td>
      </tr>
      <tr>
        <td>hide</td>
        <td>hide</td>
        <td>hide</td>
        <td class="status-locked">hide</td>
      </tr>
    </table>
    <button>1</button> <button>2</button>
&#13;
&#13;
&#13;

答案 2 :(得分:0)

仅当复选框更改时才会触发您的功能。如果你想解决你的问题,你需要在你的javascript中写这样的东西:`

$(document).ready(function () {
    hideShowRow();
    $('#product-toggle').change(function(){
      hideShowRow();
    });
});
function hideShowRow(){
      if($(this).prop("checked")) {
         $('tr:has(td.status-locked)').hide();
      } else {
        $('tr:has(td.status-locked)').show();
      }
}

`...这样你就可以随时调用你的函数hideShowRow()。您可以在document.ready,ajax.success或任何您想要的地方调用它