CSS: является ли скрытый объект интерактивным?

#css #visibility #display

#css #видимость #отобразить

Вопрос:

Если visibility свойству style HTML-элемента присвоено значение hidden , он все еще доступен для просмотра?

Когда display свойству присвоено значение none , элемент даже не является частью дерева DOM, так что это не проблема. Но мне было интересно, по-прежнему ли hidden элемент реагирует на события мыши.

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

1. Он полностью удален из потока элементов, но я не уверен, удален ли он из дерева DOM…

2. Вы не совсем правы насчет «отображать: нет». Объект с «display: none» по-прежнему является частью DOM-дерева (так что вы можете найти его, например, с помощью jQuery), но он не является частью визуального дерева.

3. Если вы хотите, чтобы объект был интерактивным, вы можете вместо этого использовать ‘opacity’.

Ответ №1:

При этом display: none он по-прежнему является частью DOM. Он просто не отображается в окне просмотра.

Что касается щелчков по элементам с помощью visibility: hidden , события не запускаются.

jsFiddle.

 $('div').click(function() {
    alert('Hello')
});  
 div {
    width: 100%;
    height: 100%;
    visibility: hidden; 
}  
 <div>abc</div>  

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

1. @BoltClock Я не был уверен, в какую сторону это пойдет, но у меня было предчувствие, что это не сработает 🙂

2. можете ли вы дать мне ссылку на это??

3. @dramasea Цитирование: браузеры были повсюду

4. Кто-нибудь знает, все ли браузеры совместимы с этим? Я вроде помню, что в очень старых версиях Firefox visibility: hidden элементы все еще запускали события щелчка, но, возможно, я путаю это с теми элементами, которые влияют на макет…

5. У вас все еще нет никаких доказательств того, что его отсутствие является официальным стандартом.

Ответ №2:

Скрытие div или display none просто делает его недоступным для пользователя. Но на самом деле это все еще элемент в dom, и вы можете щелкнуть по нему с помощью другого java script / jquery, подобного этому.

 $('div').click(function() {
    alert('Hello')
});
$('div').click();
  

jsfiddle
введите описание изображения здесь

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

1. Это правильный ответ. Отмеченный ответ @Alex неверен / вводит в заблуждение. Кто-то может спросить, зачем кому-то это нужно? У меня есть частичный просмотр в форме Ajax, и я хочу асинхронно обновлять его каждые X минут с обновлением частичного просмотра. Я добавил скрытую кнопку отправки в частичный вид и установил таймер, чтобы нажимать на кнопку каждые X минут, и я был в восторге! Мое решение проверит, не изменились ли какие-либо данные, а затем сохранит их обратно на сервер (например, автоматическое сохранение).

2. Спасибо MikeTeeVee

3. @MikeTeeVee не могли бы вы просто установить интервал, а затем собрать и опубликовать данные? кажется странным, что вам приходится скрывать элемент пользовательского интерфейса, чтобы щелкнуть по нему программно

4. @idkwhatsgoingon Я добавил <button name="ActionVerb" value="Resume" data-AsyncPostback_RefreshInterval="@Model.PauseLimit" type="submit" hidden></button> отсюда, что у меня был некоторый Javascript, который искал любые "ActionVerb" кнопки (у которых не было стиля свойств "display:none;" ), и он определял, какой интервал обновления использовать, и кнопка отправляла обратно глагол, который я хотел обработать (в данном случае «Возобновить», что вызвало бы обновление для меня). Это дало мне возможность написать JS один раз, затем поместить подобную кнопку в любом месте и немедленно подключить ее к таймеру.

Ответ №3:

Нет.

На такой элемент, как гиперссылка, нельзя щелкнуть (и перейти по ссылке), если для видимости установлено значение hidden. Аналогично, события onclick запускаться не будут.

Ответ №4:

Вы можете использовать useRef в react, добавить ref к своим входным данным и использовать его для вызова onClick, как показано ниже

   import React, { useRef } from "react";
  const input = useRef();
  <input ref={input} type="file" />
  

а затем вызывайте все, что хотите, например, метод click

  input.current.click();
  

Ответ №5:

HTML-элемент с visibiality: hidden нет visible , но он все равно занимает место на странице. Вы не можете запускать события (щелчок, наведение курсора мыши, …) с помощью мыши, но вы можете использовать javascript для доступа к нему через DOM и запуска событий.