Dialog: clicking the panel's inner padding closes it (backdropClick matches the <dialog> itself)
Maintainer thường phản hồi trong vòng 1 ngày
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 2/5
- Thời gian dự kiến
- 1-3 giờ
- Mức phù hợp với người mới
- 82/100
- Loại issue
- Lỗi
- Độ rõ ràng
- Đặc tả rõ ràng
- Mức độ hoạt động
- Sôi nổi
- Công nghệ
- html, javascript, ruby
- Lĩnh vực
- frontend
Hướng nghiên cứu
Bắt đầu với dialog_controller.js và kiểm tra backdropClick, hiện đóng hộp thoại khi đích của sự kiện là hộp thoại. Tái hiện bằng cách nhấp vào phần đệm của bảng hoặc khoảng trống giữa các trường biểu mẫu, sau đó xem xét phương pháp dựa trên hình chữ nhật được đề xuất và lưu ý về thao tác nhấp bằng bàn phím. Hoàn tất khi các lần nhấp bên trong bảng giữ bảng mở, còn các lần nhấp vào lớp nền vẫn đóng bảng.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Bug
Dialog closes when the user clicks the empty padding inside the panel, not only the backdrop.
DialogContent renders a native <dialog> with p-6 and gap-4, and dialog_controller.js dismisses on any click whose target is the <dialog> itself:
backdropClick(e) {
if (e.target === this.dialogTarget) {
this.dismiss()
}
}
A click on the ::backdrop and a click on the panel's own padding (or the gaps between children) both report e.target === dialog, so both close the dialog.
Reproduce
- Open any
Dialog(e.g. one with a form inside). - Click inside the panel, in the padding area or between two fields — not on a child element.
- The dialog closes.
Seen on main (b96aaf3); #517 keeps backdropClick as is.
Suggested fix
Only dismiss when the pointer is outside the panel's rectangle:
backdropClick(e) {
if (e.target !== this.dialogTarget) return
const rect = this.dialogTarget.getBoundingClientRect()
const outside = e.clientX < rect.left || e.clientX > rect.right || e.clientY < rect.top || e.clientY > rect.bottom
if (outside) this.dismiss()
}
(Keyboard-triggered clicks report clientX/clientY of 0, which falls outside the rect only when the dialog isn't at the top-left corner — worth guarding with e.detail === 0 if that matters.)
- Ngôn ngữ chính
- Ruby
- Star
- 1k
- Fork
- 68
- Merge trung bình
- 17 giờ 45 phút
- Pull request đã merge (30 ngày)
- 17
Chuẩn bị môi trường
- Không có Dockerfile hay tệp Docker Compose
- Có mẫu pull request
- Đọc hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của ruby-ui/ruby_ui
-
bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
Maintainer thường phản hồi trong vòng 1 ngày
-
bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
Maintainer thường phản hồi trong vòng 1 ngày
-
bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 82/100
Maintainer thường phản hồi trong vòng 1 ngày
-
bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 55/100
Maintainer thường phản hồi trong vòng 1 ngày
-
bug
Độ khó 1/5 1-3 giờ Mức phù hợp với người mới 35/100
Maintainer thường phản hồi trong vòng 1 ngày
Tất cả issue của ruby-ui/ruby_ui
Issue tương tự
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 67/100
phusion/passenger-docker#480 ·
-
f:search improvement user-experience
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 82/100
Maintainer thường phản hồi trong vòng 1 ngày
-
good first issue
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 88/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 73/100
DataDog/datadog-lambda-rb#167 ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 65/100
alphagov/public-asset-checker#378 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày