Console.log запускает оператор if, но остальная часть кода не - PullRequest
0 голосов
/ 07 апреля 2019

Я пытаюсь скрыть $("#shop-subcategories-menu"), когда во входе #filter есть что-то (текст), и переключать его обратно, когда он пуст. Я не могу понять, почему console.log(true) срабатывает и возвращает истину, но $("#shop-subcategories-menu").toggle(true); не стреляет.

Если я напишу $("#shop-subcategories-menu").toggle(true); прямо в консоль, div снова станет видимым.

Я явно что-то упускаю, но не могу понять, что, пожалуйста, помогите.

Короче говоря: как сделать переключатель <div id="shop-subcategories-menu">TEST</div> видимым, когда <input id="filter" type="text" placeholder="Search.."> пуст ?? ??

$(document).ready(function(){
 $(document).on('keyup', '#filter', function (e) {
            if ($(this).val() === '') {
                console.log(true);
                $("#shop-subcategories-menu").toggle(true);
            }
            var value = $(this).val().toLowerCase();
            $("#myTable tr").filter(function () {
                $(this).toggle($(this).text().toLowerCase().indexOf(value) > -1);
                $("#shop-subcategories-menu").toggle(false);
            });
        });
});
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<style>
table {
  font-family: arial, sans-serif;
  border-collapse: collapse;
  width: 100%;
}

td, th {
  border: 1px solid #dddddd;
  text-align: left;
  padding: 8px;
}

tr:nth-child(even) {
  background-color: #dddddd;
}
</style>
</head>
<body>

<div id="shop-subcategories-menu">TEST</div>
<p>Type something in the input field to search the table for first names, last names or emails:</p>  
<input id="filter" type="text" placeholder="Search..">
<br><br>

<table>
  <thead>
  <tr>
    <th>Firstname</th>
    <th>Lastname</th>
    <th>Email</th>
  </tr>
  </thead>
  <tbody id="myTable">
  <tr>
    <td>John</td>
    <td>Doe</td>
    <td>john@example.com</td>
  </tr>
  <tr>
    <td>Mary</td>
    <td>Moe</td>
    <td>mary@mail.com</td>
  </tr>
  <tr>
    <td>July</td>
    <td>Dooley</td>
    <td>july@greatstuff.com</td>
  </tr>
  <tr>
    <td>Anja</td>
    <td>Ravendale</td>
    <td>a_r@test.com</td>
  </tr>
  </tbody>
</table>
 

</body>
</html>

Ответы [ 2 ]

1 голос
/ 07 апреля 2019

вам не нужно вводить истину, потому что toggle() делает точно противоположное текущее состояние элемента.

(если он показан, то скрывает его, если он скрыт, то показывает)

или

Просто используйте hide() и show() jQuery https://www.w3schools.com/jquery/jquery_hide_show.asp

для полного контроля

обновить до ответа.

вам все равно нужно разобраться с тем, что происходит, когда он не пустой

в вашей функции сделайте что-то вроде:

if ($(this).val() === '') {
  console.log(true);
  $("#shop-subcategories-menu").hide();
} else {
  $("#shop-subcategories-menu").show();
}
0 голосов
/ 07 апреля 2019

Разбейте это на гораздо более простой случай без таблицы и фильтрации. Таблица и фильтрация отвлекают от того, что вы спрашиваете

Вы можете создать простое логическое значение на основе текущего значения и передать его в toggle()

$(document).ready(function() {
  $(document).on('keyup', '#filter', function(e) {
    var showMenu = !$(this).val()
    $("#shop-subcategories-menu").toggle(showMenu);

  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<div id="shop-subcategories-menu">TEST</div>

<p>Type something in the input field to search the table for first names, last names or emails:</p>

<input id="filter" type="text" placeholder="Search..">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...