Có tùy chọn mặc định để đóng hộp thoại jQuery bằng cách nhấp vào một nơi nào đó trên màn hình thay vì biểu tượng đóng không?Đóng hộp thoại khi nhấp chuột (ở bất kỳ đâu)
Trả lời
Khi tạo cửa sổ Hộp thoại JQuery, JQuery chèn lớp phủ ui-widget-overlay. Nếu bạn liên kết một hàm nhấp chuột với lớp đó để đóng hộp thoại, nó sẽ cung cấp chức năng bạn đang tìm kiếm.
Mã sẽ được cái gì như thế này (chưa được kiểm tra):
$('.ui-widget-overlay').click(function() { $("#dialog").dialog("close"); });
Edit: Sau đây đã được thử nghiệm cho Kendo cũng như:
$('.k-overlay').click(function() {
var popup = $("#dialogId").data("kendoWindow");
if (popup)
popup.close();
});
Điều đáng nói là bạn nên thêm 'nội dung' vào khai báo sự kiện nhấp chuột lớp phủ, như thể lớp phủ không tồn tại khi tạo sự kiện, nó sẽ không được áp dụng. $ ('body'). On ('click', '.ui-widget-overlay', hàm() {$ ("# dialog"). Dialog ("close");}); – Matt
bài này có thể giúp:
http://www.jensbits.com/2010/06/16/jquery-modal-dialog-close-on-overlay-click/
Xem thêm How to close a jQuery UI modal dialog by clicking outside the area covered by the box? để được giải thích về thời điểm và cách áp dụng overlay
nhấp hoặc sự kiện trực tiếp tùy thuộc vào cách bạn đang sử dụng hộp thoại trên trang.
Edit: Đây là một plugin Tôi là tác giả mà mở rộng jQuery UI Dialog để bao gồm đóng cửa khi nhấp bên ngoài cộng với các tính năng khác: https://github.com/jasonday/jQuery-UI-Dialog-extended
Dưới đây là 3 phương pháp để đóng hộp thoại jquery UI khi nhấp ngoài popin:
Nếu hộp thoại là phương thức/có lớp phủ nền: 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');
})
}
});
});
Nếu hộp thoại là phi phương thức Phương pháp 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');
}
});
Non-Modal thoại Cách 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;
}
});
Trong một số trường hợp, câu trả lời của Jason là quá mức cần thiết. Và $('.ui-widget-overlay').click(function(){ $("#dialog").dialog("close"); });
không phải lúc nào cũng hoạt động với nội dung động.
Các giải pháp mà tôi tìm thấy tác phẩm trong mọi trường hợp là:
$('body').on('click','.ui-widget-overlay',function(){ $('#dialog').dialog('close'); });
trong những trường hợp nào mà giải pháp của tôi không hoạt động? (ngoài tò mò) vì hầu hết sự phát triển của tôi là dành cho nội dung động - các phương pháp lớp phủ và phi lớp phủ của tôi đã hoạt động mọi lúc. Ví dụ: – Jason
sau khi sử dụng xajax để cập nhật DOM. – neokio
Tôi đã không tìm thấy nó là một vấn đề, nhưng ở trên của bạn là một bình luận hơn câu trả lời - bổ sung, '.on' là gần đây hơn và đại biểu có thể là một lựa chọn an toàn hơn. – Jason
Nếu bạn có một vài hộp thoại mà có thể được mở trên một trang, điều này sẽ cho phép bất kỳ người trong số họ được đóng lại bằng cách nhấp vào nền:
$('body').on('click','.ui-widget-overlay', function() {
$('.ui-dialog').filter(function() {
return $(this).css("display") === "block";
}).find('.ui-dialog-content').dialog('close');
});
(Chỉ làm việc cho các hộp thoại modal, vì nó phụ thuộc vào '.ui-widget overlay'. Và nó gần tất cả hộp thoại mở bất kỳ thời điểm nền tảng của một trong số họ được nhấp.)
Nếu bạn muốn làm điều đó cho tất cả các hộp thoại trong toàn bộ trang, hãy thử mã sau ...
$.extend($.ui.dialog.prototype.options, {
open: function() {
var dialog = this;
$('.ui-widget-overlay').bind('click', function() {
$(dialog).dialog('close');
});
}
});
Quay lại đầu trang Nó hỗ trợ một hoặc nhiều hộp thoại trên cùng một trang.
biết thêm thông tin trên trang web của tôi ở đây: http://www.coheractio.com/blog/closing-jquery-ui-dialog-widget-when-clicking-outside
Laurent
Hãy thử điều này:
$(".ui-widget-overlay").click(function() {
$(".ui-icon.ui-icon-closethick").trigger("click");
});
Chào mừng bạn đến với SO và cảm ơn câu trả lời của bạn. Tôi đang xem xét câu trả lời của bạn vì câu trả lời đó đã bị gắn cờ để đánh giá chất lượng do tính dễ bị tổn thương của nó. Trong trường hợp này câu trả lời của bạn có vẻ hữu ích và có thể đúng, vì vậy tôi sẽ không xóa nó. Tuy nhiên, nó sẽ thực sự hữu ích nếu bạn có thể thêm một số văn bản xung quanh nó giải thích những gì nó làm, làm thế nào nó hoạt động, và làm thế nào nó giải quyết vấn đề của OP. Cảm ơn. –
Nếu mã của bài viết trước đó không hoạt động, cung cấp cho một thử này:
$("a.ui-dialog-titlebar-close")[0].click();
Một chút trễ nhưng đây là giải pháp phù hợp với tôi. Hoàn hảo nếu phương thức của bạn nằm trong thẻ lớp phủ. Vì vậy, phương thức sẽ đóng khi bạn nhấp vào bất kỳ đâu bên ngoài nội dung phương thức.
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();
}
});
Đây là một working example
- 1. Hộp thoại giao diện người dùng jQuery: cách đóng hộp thoại khi nhấp vào bên ngoài?
- 2. Xử lý sự kiện nhấp ở bất kỳ đâu trong bảng điều khiển trong C#
- 3. Xử lý sự kiện chuột ở bất kỳ đâu với JavaFX
- 4. Chuyển động chuột Java ở bất kỳ đâu trên màn hình
- 5. Có một cú nhấp chuột ở bất kỳ đâu trên trang web, mở một menu thả xuống chọn
- 6. Làm cách nào để xử lý một nhấp chuột ở bất kỳ đâu trong trang, ngay cả khi một phần tử nhất định dừng quá trình truyền?
- 7. Sau khi thêm hộp thoại không đóng
- 8. Xác nhận hộp thoại khi tôi đóng trình duyệt?
- 9. Hộp thoại bộ chọn tệp trong WPF ở đâu?
- 10. jQuery ẩn danh sách thả xuống khi được nhấp vào bất kỳ đâu nhưng menu
- 11. bắt bất kỳ nhấp chuột thực hiện bằng jQuery
- 12. Đóng các hộp thoại con khi đóng phụ huynh
- 13. Hộp kết hợp bất ngờ tự động đóng khi chuột được nhả ra
- 14. Hộp thoại Jquery - không phai mờ trước khi đóng
- 15. Hộp thoại Tham số báo cáo ở đâu
- 16. Danh sách dữ liệu hộp danh sách - mục chỉ có thể chọn bằng cách nhấp vào một phần phụ, không chỉ ở bất kỳ đâu trên mục
- 17. Android AlertDialog với DialogFragment: không đóng hộp thoại ngay cả khi OK được nhấp
- 18. Cách đóng cửa sổ bật lên Bootstrap (hoặc bất kỳ mục nào nói chung) khi người dùng nhấp vào nó?
- 19. Hộp thoại FB.ui yêu cầu redirect_uri, hộp thoại không đóng
- 20. Ẩn bàn phím nhập mềm khi hộp thoại đóng
- 21. Chi tiết bảng trong SQL ở bất kỳ đâu?
- 22. Nhấp vào bên ngoài hộp thoại không có phương thức để đóng
- 23. Cách đóng Hộp thoại jQuery trong hộp thoại?
- 24. Làm cách nào để kích hoạt sự kiện khi nhấp chuột xảy ra bên ngoài hộp thoại
- 25. cách kích hoạt sự kiện khi ai đó nhấp vào bất kỳ đâu trên màn hình trong ứng dụng android?
- 26. ngừng hiển thị hộp màu dừng khi nhấp vào bất kỳ nơi nào bên ngoài cửa sổ bật lên
- 27. Mở hộp thoại jQuery khi nhấp vào Html.ActionLink + MVC4
- 28. Hộp thoại gán thứ tự tab trong Visual Studio 2012 ở đâu?
- 29. Cách phát hiện tên biểu mẫu khi chuột ở bất kỳ hình thức SDI nào
- 30. Hộp danh sách WinForms Nhấp chuột phải
bài này có thể giúp http://stackoverflow.com/questions/8384067/how -to-dismiss-the-dialog-với-click-on-outside-of-the-dialog –