-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpopup-fix.js
More file actions
73 lines (61 loc) · 4.07 KB
/
Copy pathpopup-fix.js
File metadata and controls
73 lines (61 loc) · 4.07 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
// popup-fix.js (แก้ไขล่าสุด)
document.addEventListener('DOMContentLoaded', function() {
// เลือก trigger ทั้งหมด
const triggers = document.querySelectorAll('.popular-majors-trigger');
triggers.forEach(trigger => {
// หา popup ที่เกี่ยวข้องกับ trigger นี้
// จาก HTML ของคุณ, popup เป็น child ของ trigger
const popup = trigger.querySelector('.popular-majors-popup');
if (!popup) {
console.warn('Popup not found for trigger:', trigger);
return; // ข้าม trigger นี้ถ้าไม่เจอ popup
}
// Event listener สำหรับการคลิกที่ trigger
trigger.addEventListener('click', function(event) {
event.stopPropagation(); // ป้องกัน event click ไม่ให้กระจายไปยัง document ทันที
// ตรวจสอบสถานะปัจจุบันของ popup นี้ (แก้ไขชื่อตัวแปร)
const isOpen = this.classList.contains('open');
// ปิด popup อื่นๆ ทั้งหมดก่อน
document.querySelectorAll('.popular-majors-trigger.open').forEach(otherTrigger => {
if (otherTrigger !== this) {
otherTrigger.classList.remove('open');
// console.log('Closed other popup:', otherTrigger);
}
});
// เปิด/ปิด popup ปัจจุบัน
if (isOpen) {
this.classList.remove('open');
// console.log('Popup closed by click:', this);
} else {
this.classList.add('open');
// console.log('Popup opened by click:', this);
}
});
// ป้องกันการปิด popup เมื่อคลิกข้างในตัว popup เอง
popup.addEventListener('click', function(event) {
event.stopPropagation(); // หยุด event click ไม่ให้กระจายไปปิด popup
// console.log('Clicked inside popup, propagation stopped.');
});
});
// Event listener สำหรับการคลิกที่ใดๆ บน document เพื่อปิด popup ที่เปิดอยู่
document.addEventListener('click', function(event) {
const openTriggers = document.querySelectorAll('.popular-majors-trigger.open');
openTriggers.forEach(openTrigger => {
// ไม่จำเป็นต้องหา popup อีกครั้ง เพราะเราจะปิด trigger โดยตรง
// และ CSS จะจัดการซ่อน popup ที่เป็น child
// ตรวจสอบว่าการคลิกไม่ได้เกิดขึ้นที่ตัว trigger ที่เปิดอยู่
// (การคลิกภายใน popup ถูกจัดการโดย stopPropagation ใน popup เองแล้ว)
if (!openTrigger.contains(event.target)) {
openTrigger.classList.remove('open');
// console.log('Popup closed by click outside:', openTrigger);
}
});
});
// ส่วนของ Hover:
// แนะนำให้ใช้ CSS :hover เป็นหลักสำหรับการแสดงผลบน Desktop
// เช่น .popular-majors-trigger:hover .popular-majors-popup { display: block; }
// JavaScript ส่วนนี้จะเน้นการทำงานเมื่อคลิก
// หากต้องการให้ popup ค้างเมื่อเอาเมาส์ออกจาก trigger ไปยัง popup (สำหรับ hover)
// อาจจะต้องใช้ logic ที่ซับซ้อนขึ้นเล็กน้อย หรือปรับ CSS ให้รองรับ
// แต่สำหรับการคลิก โค้ดด้านบนควรจะเพียงพอ
});