Как мне скрыть дочерний элемент на скрытой вкладке с помощью Jquery и держать его скрытым до тех пор, пока я его не покажу?

#javascript #jquery #jquery-tools

#javascript #jquery #jquery-tools

Вопрос:

Вероятно, лучше всего объяснить на примере:

 <div id="tab-1">
  <input name="1" type="text" />
  <input name="2" type="text" />
  <input name="3" type="text" />
<div>
<div id="tab-2">
  <input name="4" type="text" />
  <input name="5" type="text" />
  <input name="6" type="text" />
<div>
  

Я использую инструмент Jquery Tools «Вкладки». Это переключает видимость двух приведенных выше разделов, так что одновременно отображается только один.

Проблема заключается в следующем:

  1. Пользователь переключается на вкладку 2. Это скрывает вкладку-1 и поля с 1 по 3. Здесь также отображаются tab-2 и его дочерние элементы, поля с 4 по 6.

  2. Пользователь выполняет действие на вкладке-2, которое должно удалить поле 2 из скрытой вкладки-1. Я использую $('#field-2').hide(0);

Это должно скрыть второе поле, но ничего не делает, поскольку второе поле уже скрыто. Пока все в порядке.

3. Пользователь переключается обратно на вкладку-1.

Фактический результат: все три поля, включая поле 2, теперь снова видны.

Желаемый результат: поля 1 и 3 теперь видны, но переключение на tab-1 не отменяет скрытие поля 2, поскольку оно было явно скрыто функцией. Поле 2 должно оставаться скрытым до тех пор, пока оно явно не будет показано.

Я думаю, что смогу обойти это, назначив специальный класс css полю с помощью display:none; , но мне было интересно, есть ли лучшее решение для отображения / скрытия независимо от вкладки, на которой находится элемент, без назначения дополнительных классов css.

Ответ №1:

Похоже, это работает, если вы действительно измените display стиль элемента, вместо того чтобы использовать hide :

 $('selector').css('display', 'none');
  

Комментарии:

1. Это работает, спасибо. Хотя это странно, поскольку метод .hide() делает то же самое….

2. @Nick Я предполагаю, что hide сначала проверяется, виден ли элемент, прежде чем он что-либо сделает. Если это не так (если, например, его родительский элемент уже скрыт), то он ничего не делает? Конечно, почему бы и нет.