Почему jQuery toggle () выполняется, когда не вызывается - PullRequest
0 голосов
/ 30 января 2019

Я использую Ajax для создания таблицы, некоторые столбцы видимы, некоторые не видны.

Я знаю, что есть много способов сделать что-то, ниже я делаю это.

'17' в приведенном ниже коде представляет одно значение из набора файлов cookie, когда требуются дополнительные столбцы.При начальной загрузке таблицы файл cookie читается, и все столбцы, указанные в файле cookie, включаются.Эта часть работает просто отлично.

Любое редактирование таблицы Ajax приводит к обновлению таблицы, возвращая ее в исходное состояние, что скрывает столбец 17. Это означает, что на файл cookie необходимо снова обратиться, чтобы определить, что хочет пользовательчтобы увидеть, и столбец должен быть переключен снова.Эта часть не работает так хорошо.При загрузке таблицы все работает нормально, при первом обновлении таблицы и всех последующих обновлениях таблицы я никогда не смогу включить столбец 17 после того, как первое обновление отключило его.

Насколько я могу сказать, переключение() происходит независимо от текущего видимого состояния столбца 17. Это код, который я использую для проверки и переключения.

if (sh == '17') { 
  if ($(".toggleCNTY").is(':visible' )) {
    // 'true' So do Nothing because this its already visible
  } else if (!$(".toggleCNTY").is(':visible' )) { 
    // 'false' So toggle it to be visible
    $(".toggleCNTY").toggle();  
  }
}

Несмотря на то, что я могу убедиться, что код попадает только в каждыйиз цикла if и else, как и должно быть, в конце происходит другое переключение, когда столбец уже виден.

Кто-то видит причину этого?

1 Ответ

0 голосов
/ 30 января 2019

Сначала я бы порекомендовал вам упростить код, удалив ненужную логику, например:

if (sh === '17' && !$(".toggleCNTY").is(':visible')) {
    $(".toggleCNTY").toggle();
}

Хотя я не думаю, что это само по себе решит вашу проблему.Вы можете проверить в консоли браузера свойство display элемента.Кажется, что функция («видимая») всегда возвращает ложь.Если это так, вы можете проверить видимость или отображение элемента и использовать его в своей логике:

const isCNTYHidden = $(".toggleCNTY").css('visibility') === 'hidden' || $(".toggleCNTY").css('display') === 'none';

if (sh === '17' && isCNTYHidden) {
    $(".toggleCNTY").toggle();
}
...