Можем ли мы заставить всплывающие окна отклоняться так же, как модалы, т.е. закрыть их, когда пользователь щелкает где-то за их пределами?
К сожалению, я не могу просто использовать настоящий модальный вместо popover, потому что модальный означает position: fixed, и это больше не будет popover. :(
twitter-bootstrap
popover
Анте Врли
источник
источник
data-trigger="hover"
иdata-trigger="focus"
являются встроенной альтернативой для закрытия поповера, если вы не хотите использовать переключатель. На мой взгляд,data-trigger="hover"
обеспечивает лучший пользовательский опыт ... нет необходимости писать дополнительный код .js ...Ответы:
Обновление: чуть более надежное решение: http://jsfiddle.net/mattdlockyer/C5GBU/72/
Для кнопок, содержащих только текст:
Для кнопок, содержащих значки (этот код содержит ошибку в Bootstrap 3.3.6, см. Исправление ниже в этом ответе)
Для JS Generated Popovers Использование
'[data-original-title]'
вместо'[data-toggle="popover"]'
Предостережение . Решение, приведенное выше, позволяет открывать сразу несколько всплывающих окон.
Один поповер за раз, пожалуйста:
Обновление: Bootstrap 3.0.x, см. Код или скрипку http://jsfiddle.net/mattdlockyer/C5GBU/2/
Это обрабатывает закрытие всплывающих окон, которые уже открыты и не нажаты, или их ссылки не были нажаты.
Обновление: Bootstrap 3.3.6, см. Скрипку
Исправлена ошибка, из-за которой после закрытия требуется 2 клика для повторного открытия.
Обновление: используя условное условие предыдущего улучшения, это решение было достигнуто. Исправьте проблему двойного щелчка и призрачного всплывающего окна:
источник
$(document)
вместо,$('body')
так как иногдаbody
не распространяется на всю страницу.'[data-toggle="popover"]'
, что не работает с сгенерированными JavaScript всплывающими окнами, я использовал'[data-original-title]'
в качестве селектора.Это закрывает все всплывающие окна, если вы нажимаете в любом месте, кроме всплывающих окон
ОБНОВЛЕНИЕ для Bootstrap 4.1
источник
Самая простая, самая отказоустойчивая версия , работает с любой версией начальной загрузки.
Демо-версия: http://jsfiddle.net/guya/24mmM/
Демонстрация 2: Не отклонять при нажатии внутри всплывающего контента http://jsfiddle.net/guya/fjZja/
Демонстрация 3: Несколько поповеров: http://jsfiddle.net/guya/6YCjW/
Простое обращение к этой строке приведет к удалению всех всплывающих окон:
Отключить все всплывающие окна при нажатии снаружи с этим кодом:
Фрагмент выше прикрепляет событие click к телу. Когда пользователь нажимает на поповер, он будет вести себя как обычно. Когда пользователь нажимает на что-то, что не является поповером, оно закрывает все всплывающие окна.
Он также будет работать с всплывающими окнами, инициированными с помощью Javascript, в отличие от некоторых других примеров, которые не будут работать. (см. демо)
Если вы не хотите отклоняться при нажатии внутри содержимого поповера, используйте этот код (см. Ссылку на 2-ую демонстрацию):
источник
!$(e.target).closest('.popover.in').length
, будет более эффективным, чем!$(e.target).parents().is('.popover.in')
.В bootstrap 2.3.2 вы можете установить триггер на «фокус», и он просто работает:
источник
Это в основном не очень сложно, но есть некоторые проверки, чтобы избежать глюков.
Демо (jsfiddle)
источник
popover()
нажатия, а не при наведении курсора?stopPropagation()
событие, переданное обработчику щелчка (если нет, скрывающий обработчик сразу скрывает всплывающее окно). Демонстрация (jsfiddle)Ни одно из предполагаемых решений с высоким рейтингом не сработало для меня правильно. Каждый из них приводит к ошибке, когда после открытия и закрытия (при нажатии на другие элементы) всплывающее окно в первый раз не открывается снова, пока вы не сделаете два щелчка по инициирующей ссылке вместо одного.
Так что я немного изменил это:
источник
Я сделал jsfiddle, чтобы показать вам, как это сделать:
http://jsfiddle.net/3yHTH/
Идея состоит в том, чтобы показывать всплывающее окно при нажатии кнопки и скрывать всплывающее окно при нажатии вне кнопки.
HTML
JS
источник
jsfiddle bootstrap
и он дал мне скелет начальной загрузки css + js в jsfiddle.просто добавьте этот атрибут с элементом
источник
Это было задано раньше здесь . Тот же самый ответ, который я дал тогда, все еще применяется:
У меня была похожая потребность, и я нашел это отличное небольшое расширение Twitter Bootstrap Popover от Ли Кармайкла, названное BootstrapX - clickover . У него также есть несколько примеров использования здесь . В основном это изменит поповер на интерактивный компонент, который закроется, когда вы щелкнете в другом месте на странице или нажмете кнопку закрытия внутри всплывающего окна. Это также позволит одновременно открывать несколько всплывающих окон и множество других приятных функций.
источник
Уже поздно на вечеринку ... но я решил поделиться этим. Я люблю поповер, но у него так мало встроенной функциональности. Я написал расширение начальной загрузки .bubble (), это все, что я хотел бы, чтобы popover был. Четыре способа уволить. Нажмите снаружи, переключитесь на ссылку, нажмите X и нажмите escape.
Он позиционируется автоматически, поэтому он никогда не уходит со страницы.
https://github.com/Itumac/bootstrap-bubble
Это не бесплатная самореклама ... Я так много раз в своей жизни брал чужой код, что хотел предложить свои собственные усилия. Повернись и посмотри, сработает ли это для тебя.
источник
Согласно http://getbootstrap.com/javascript/#popovers ,
Используйте триггер фокусировки, чтобы отклонить всплывающие окна при следующем щелчке, который делает пользователь.
источник
<a>
тег, а не<button>
тег, и вы также должны включитьrole="button"
иtabindex
атрибуты «. Вы пробовали это с этими спецификациями?Изменено принятое решение. Что я испытал, так это то, что после того, как некоторые поповеры были скрыты, их нужно было дважды щелкнуть, чтобы снова появиться. Вот что я сделал для того, чтобы popover («hide») не вызывался на уже скрытых popovers.
источник
Просто добавьте этот атрибут в элемент HTML, чтобы закрыть всплывающее окно в следующем щелчке.
ссылка с https://getbootstrap.com/docs/3.3/javascript/#popovers
источник
Это решение отлично работает:
источник
источник
Вы также можете использовать всплывающее окно событий, чтобы удалить всплывающее окно из DOM. Это немного грязно, но работает нормально.
В своем html добавьте класс .popover-close к содержимому внутри поповера, который должен закрывать поповер.
источник
Кажется, метод 'hide' не работает, если вы создаете всплывающее окно с делегированием селектора, вместо этого должен использоваться 'destroy'.
Я сделал это так:
JSfiddle здесь
источник
Мы обнаружили, что у нас возникла проблема с решением @mattdlockyer (спасибо за решение!). При использовании свойства селектора для конструктора popover, как это ...
... предлагаемое решение для BS3 не будет работать. Вместо этого он создает второй экземпляр popover, локальный для него
$(this)
. Вот наше решение, чтобы предотвратить это:Как уже упоминалось,
$(this).popover('hide');
будет создан второй экземпляр из-за делегированного слушателя. Предоставленное решение скрывает только всплывающие окна, которые уже созданы.Надеюсь, я смогу сэкономить вам время.
источник
Bootstrap изначально поддерживает это :
JS Bin Demo
источник
это решение избавляет от надоедливого 2-го щелчка при показе поповера во второй раз
протестировано с Bootstrap v3.3.7
источник
Я пробовал многие из предыдущих ответов, на самом деле у меня ничего не работает, но это решение сработало:
https://getbootstrap.com/docs/3.3/javascript/#dismiss-on-next-click
Пример:
источник
Я придумал это: мой сценарий включал в себя больше всплывающих окон на той же странице, и скрытие их просто делало их невидимыми, и поэтому щелкать по элементам позади поповера было невозможно. Идея состоит в том, чтобы пометить конкретную ссылку popover как «активную», и тогда вы можете просто «переключить» активный popover. Это полностью закроет popover $ ('. Popover-link'). Popover ({html: true, container: 'body'})
источник
Я просто удаляю другие активные всплывающие окна до того, как будет показан новый поповер (начальная загрузка 3):
источник
протестирован с 3.3.6 и второй клик в порядке
источник
демо: http://jsfiddle.net/nessajtr/yxpM5/1/
}
это мое решение для этого.
источник
Этот подход гарантирует, что вы можете закрыть всплывающее окно, нажав в любом месте на странице. Если вы нажмете на другую кликабельную сущность, она скрывает все другие всплывающие окна. Анимация: ложь требуется, иначе вы получите ошибку jquery .remove в вашей консоли.
источник
Хорошо, это моя первая попытка ответить на что-то о stackoverflow, так что здесь ничего не идет: P
Похоже, что не совсем ясно, что эта функция на самом деле работает из коробки на последней загрузке (ну, если вы готовы пойти на компромисс, где пользователь может щелкнуть. Я не уверен, нужно ли вам нажимать hover 'per se, но на iPad щелчок работает как переключатель.
Конечным результатом является то, что на рабочем столе вы можете зависать или нажимать (большинство пользователей будут зависать). На сенсорном устройстве прикосновение к элементу вызовет его подъем, а прикосновение к нему снова приведет к его снятию. Конечно, это небольшой компромисс с вашим первоначальным требованием, но, по крайней мере, ваш код стал чище :)
источник
Взяв код Мэтта Локьера, я сделал простой сброс, чтобы dom не скрывался элементом hide.
Код Мэтта: http://mattlockyer.com/2013/04/08/close-a-twitter-bootstrap-popover-when-clicking-outside/
Скрипка: http://jsfiddle.net/mrsmith/Wd2qS/
источник
Попробуйте, это будет скрыто, нажав снаружи.
источник
У меня были проблемы с решением mattdlockyer, потому что я динамически настраивал ссылки для всплывающих окон, используя такой код:
Поэтому мне пришлось изменить это так. Это исправило много проблем для меня:
Помните, что destroy избавляет от элемента, поэтому часть селектора важна при инициализации всплывающих окон.
источник