Есть ли опция по умолчанию закрыть диалоговое окно jQuery, щелкнув где-то на экране вместо значка закрытия?Закрыть диалог при нажатии (в любом месте)
ответ
При создании окна JQuery Dialog JQuery вставляет класс ui-widget-overlay. Если вы привяжете функцию щелчка к этому классу, чтобы закрыть диалоговое окно, оно должно предоставить нужные функции.
код будет что-то вроде этого (непроверенные):
$('.ui-widget-overlay').click(function() { $("#dialog").dialog("close"); });
Edit: была протестирована на Кендо, а также следующее:
$('.k-overlay').click(function() {
var popup = $("#dialogId").data("kendoWindow");
if (popup)
popup.close();
});
Стоит добавить, вы должны добавить 'body' к объявлению события наложения, как если бы наложение не было при создании события, оно не будет применяться. $ ('body'). On ('click', '.ui-widget-overlay', function() {$ ("# dialog"). Dialog ("close");}); – Matt
Это сообщение может помочь:
http://www.jensbits.com/2010/06/16/jquery-modal-dialog-close-on-overlay-click/
См. Также How to close a jQuery UI modal dialog by clicking outside the area covered by the box? для объяснения того, когда и как подать заявку. overlay
нажмите или зарегистрируйтесь в зависимости от того, как вы используете диалог на странице.
Edit: Вот плагин, который я автором, который расширяет JQuery UI Dialog включить закрытие при нажатии снаружи плюс другие функции: https://github.com/jasonday/jQuery-UI-Dialog-extended
Вот 3 способа, чтобы закрыть диалоговое окно JQuery UI при нажатии вне POPIN:
Если диалог модальный/имеет фоновую накладку: http://jsfiddle.net/jasonday/6FGqN/
jQuery(document).ready(function() {
jQuery("#dialog").dialog({
bgiframe: true,
autoOpen: false,
height: 100,
modal: true,
open: function() {
jQuery('.ui-widget-overlay').bind('click', function() {
jQuery('#dialog').dialog('close');
})
}
});
});
Если диалог покадрово Метод 1: http://jsfiddle.net/jasonday/xpkFf/
// Close Pop-in If the user clicks anywhere else on the page
jQuery('body')
.bind('click', function(e) {
if(jQuery('#dialog').dialog('isOpen')
&& !jQuery(e.target).is('.ui-dialog, a')
&& !jQuery(e.target).closest('.ui-dialog').length
) {
jQuery('#dialog').dialog('close');
}
});
немодальные диалог Метод 2: http://jsfiddle.net/jasonday/eccKr/
$(function() {
$('#dialog').dialog({
autoOpen: false,
minHeight: 100,
width: 342,
draggable: true,
resizable: false,
modal: false,
closeText: 'Close',
open: function() {
closedialog = 1;
$(document).bind('click', overlayclickclose); },
focus: function() {
closedialog = 0; },
close: function() {
$(document).unbind('click'); }
});
$('#linkID').click(function() {
$('#dialog').dialog('open');
closedialog = 0;
});
var closedialog;
function overlayclickclose() {
if (closedialog) {
$('#dialog').dialog('close');
}
//set to one because click on dialog box sets to zero
closedialog = 1;
}
});
В некоторых случаях ответ Джейсона является излишеством. И $('.ui-widget-overlay').click(function(){ $("#dialog").dialog("close"); });
не всегда работает с динамическим контентом.
Решения, которое я нахожу работу во всех случаях:
$('body').on('click','.ui-widget-overlay',function(){ $('#dialog').dialog('close'); });
В каких сценариях ни одно из моих решений не работает? (из любопытства), поскольку большинство моих разработок предназначено для динамического контента - мои оверлейные и не накладываемые методы работали каждый раз. – Jason
после использования xajax для обновления DOM, например. – neokio
Я не нашел, что это проблема, но ваш выше - скорее комментарий, чем ответ. Кроме того, '.on' является более поздним, и делегат может быть более безопасным. – Jason
Если у вас есть несколько диалоговых окон, которые могут быть открыты на странице, это позволит любому из них можно закрыть, нажав на фоне:
$('body').on('click','.ui-widget-overlay', function() {
$('.ui-dialog').filter(function() {
return $(this).css("display") === "block";
}).find('.ui-dialog-content').dialog('close');
});
(работает только для модальных диалогов, поскольку она опирается на «.ui-виджет-накладкой. И это делает близко все открывать окна в любое время на фоне одного из них щелкнул.)
Если вы хотите сделать это для всех диалогов по всему сайту, попробуйте следующий код ...
$.extend($.ui.dialog.prototype.options, {
open: function() {
var dialog = this;
$('.ui-widget-overlay').bind('click', function() {
$(dialog).dialog('close');
});
}
});
Столкнувшись с той же проблемой, я создал небольшой плагин, который позволяет закрыть диалоговое окно при нажатии вне его ли это модальный или покадрово диалога. Он поддерживает один или несколько диалогов на одной странице.
Более подробная информация на моем сайте здесь: http://www.coheractio.com/blog/closing-jquery-ui-dialog-widget-when-clicking-outside
Laurent
Попробуйте это:
$(".ui-widget-overlay").click(function() {
$(".ui-icon.ui-icon-closethick").trigger("click");
});
Добро пожаловать в SO и спасибо за ваш ответ. Я просматриваю ваш ответ, потому что он был отмечен за качественный обзор из-за его терпения. В этом случае ваш ответ кажется полезным и, возможно, правильным, поэтому я его не удалю. Однако было бы очень полезно, если бы вы могли добавить в него текст, объясняющий, что он делает, как он работает и как он решает проблему OP. Благодарю. –
Если код предыдущих сообщений не работает, дать этому попытку:
$("a.ui-dialog-titlebar-close")[0].click();
Немного поздно, но это решение, которое сработало для меня. Идеально, если ваш модаль находится внутри тега overlay. Таким образом, модальный будет закрываться, когда вы нажимаете где-либо вне модального контента.
HTML
<div class="modal">
<div class="overlay">
<div class="modal-content">
<p>HELLO WORLD!</p>
</div>
</div>
</div>
JS
$(document).on("click", function(event) {
if ($(event.target).has(".modal-content").length) {
$(".modal").hide();
}
});
Вот working example
- 1. Закрыть активность при нажатии в любом месте
- 2. Как скрыть popover при нажатии в любом месте?
- 3. Как скрыть fab при нажатии в любом месте экрана?
- 4. Модальный диалог реагирует при нажатии в любом месте; не только на кнопке
- 5. скрыть боковую панель при нажатии в любом месте на странице
- 6. Отключить диалог при нажатии на сам диалог
- 7. Как закрыть всплывающее окно при щелчке в любом месте сайта
- 8. Как удалить класс при нажатии в любом месте в AngularJS
- 9. Как закрыть сообщение GROWL при нажатии в любом месте сообщения? (JSF, Primefaces)
- 10. jQuery - на jPanelMenu, как закрыть переключаемое подменю при нажатии в любом месте за его пределами?
- 11. Закрыть JQuery Sliding Menu при нажатии или прикосновении в любом месте тела
- 12. Как закрыть дочернее меню при нажатии в любом месте страницы без jQuery?
- 13. Как закрыть раскрывающееся меню javascript, щелкнув в любом месте?
- 14. jQuery слайд назад при нажатии в любом месте на странице
- 15. Bootstrap modal закрывается при нажатии в любом месте
- 16. javascript для скрытия при нажатии в любом месте тела
- 17. jQuery скрыть элемент при нажатии в любом месте на странице
- 18. jQuery Select2 очищает входное значение при нажатии в любом месте?
- 19. Скрыть DateField при нажатии в любом месте на странице
- 20. Scrollpane - разрешить scrollDrag при нажатии в любом месте внутри панели?
- 21. Скрыть элемент при нажатии в любом месте за его пределами
- 22. Скрыть ввод текста при нажатии в любом месте страницы
- 23. показать и скрыть div при нажатии в любом месте
- 24. Получение координат при нажатии в любом месте MapView
- 25. Отключить наложение при нажатии в любом месте на странице
- 26. jQuery оживить назад при нажатии в любом месте на странице
- 27. Google maps api закрыть infowindow при нажатии в другом месте
- 28. winforms - contextMenuStrip - закрыть при нажатии
- 29. Как закрыть диалог jQuery при нажатии кнопки внутри iFrame?
- 30. Закрыть PrintPreviewDialog при нажатии ESC
Это сообщение может помочь http://stackoverflow.com/questions/8384067/how -to-reject-the-dialog-with-click-on-out-of-the-0 –