diff --git a/app/Views/client_list.php b/app/Views/client_list.php index b54817b..f7f8296 100755 --- a/app/Views/client_list.php +++ b/app/Views/client_list.php @@ -202,6 +202,7 @@ table.dataTable thead th { customDropdown.querySelectorAll('.dropdown-item').forEach(item => { item.addEventListener('click', function(e) { + e.preventDefault(); const onclickAttr = this.getAttribute('onclick'); if (onclickAttr) { eval(onclickAttr); diff --git a/app/Views/employee_list.php b/app/Views/employee_list.php index 976e2f6..3a779fb 100755 --- a/app/Views/employee_list.php +++ b/app/Views/employee_list.php @@ -264,8 +264,21 @@ function init() { const customDropdown = document.createElement('div'); customDropdown.className = 'custom-dropdown-menu'; + + // Clone original dropdown items while moving onclick handlers to data attributes + const originalItems = originalDropdown.querySelectorAll('.dropdown-item'); customDropdown.innerHTML = originalDropdown.innerHTML; + // Transfer onclick handlers to data attributes + customDropdown.querySelectorAll('.dropdown-item').forEach((item, index) => { + const originalItem = originalItems[index]; + const originalOnclick = originalItem.getAttribute('onclick'); + if (originalOnclick) { + item.setAttribute('data-onclick', originalOnclick); + item.removeAttribute('onclick'); // Remove original handler + } + }); + return customDropdown; } @@ -287,7 +300,10 @@ function init() { } function handleItemClick(e, item) { - const onclickAttr = item.getAttribute('onclick'); + e.preventDefault(); + + // Execute the stored onclick handler + const onclickAttr = item.getAttribute('data-onclick'); if (onclickAttr) { eval(onclickAttr); } diff --git a/app/Views/test_members_list.php b/app/Views/test_members_list.php index aaaf425..80e0625 100755 --- a/app/Views/test_members_list.php +++ b/app/Views/test_members_list.php @@ -420,17 +420,21 @@ document.addEventListener("DOMContentLoaded", function () { // Create custom dropdown function createCustomDropdown(row) { - // Get the original dropdown items const originalDropdown = row.querySelector('.dropdown-menu'); if (!originalDropdown) return null; - // Create new dropdown with proper background and spacing const customDropdown = document.createElement('div'); customDropdown.className = 'custom-dropdown-menu'; - - // Copy inner content while maintaining icon alignment customDropdown.innerHTML = originalDropdown.innerHTML; - + + // Remove inline onclick handlers and store them in data attributes + const originalItems = originalDropdown.querySelectorAll('.dropdown-item'); + customDropdown.querySelectorAll('.dropdown-item').forEach((item, index) => { + const originalOnclick = originalItems[index].getAttribute('onclick'); + item.removeAttribute('onclick'); // Remove the inline handler + item.setAttribute('data-onclick', originalOnclick); // Store in data attribute + }); + return customDropdown; } @@ -444,45 +448,34 @@ document.addEventListener("DOMContentLoaded", function () { document.body.appendChild(customDropdown); row.addEventListener("click", function(event) { - // Ignore clicks on the first column (td:first-child) - if (event.target.closest('td:first-child')) { - return; - } + // Ignore clicks on the first column + if (event.target.closest('td:first-child')) return; - // Hide any active dropdown - if (activeDropdown) { - activeDropdown.style.display = 'none'; - } + if (activeDropdown) activeDropdown.style.display = 'none'; - // Get click position const rect = event.target.getBoundingClientRect(); - - // Position the dropdown with some offset customDropdown.style.display = 'block'; customDropdown.style.position = 'fixed'; customDropdown.style.left = `${rect.left}px`; - customDropdown.style.top = `${rect.bottom + 5}px`; // Add 5px gap - - // Set as active dropdown + customDropdown.style.top = `${rect.bottom + 5}px`; activeDropdown = customDropdown; event.stopPropagation(); }); - // Preserve click handlers and add auto-close + // Handle custom dropdown clicks customDropdown.querySelectorAll('.dropdown-item').forEach(item => { item.addEventListener('click', function(e) { - const onclickAttr = this.getAttribute('onclick'); - if (onclickAttr) { - eval(onclickAttr); - } + e.preventDefault(); - const href = this.getAttribute('href'); - if (href && href !== '#') { - window.location.href = href; - } + // Execute the original onclick from data attribute + const onclickAttr = this.getAttribute('data-onclick'); + if (onclickAttr) eval(onclickAttr); + + // Handle href navigation + const href = this.getAttribute('href'); + if (href && href !== '#') window.location.href = href; - // Close the dropdown after handling the click if (activeDropdown) { activeDropdown.style.display = 'none'; activeDropdown = null; @@ -493,7 +486,7 @@ document.addEventListener("DOMContentLoaded", function () { }); }); - // Close dropdown when clicking outside + // Close dropdown on outside click document.addEventListener("click", function() { if (activeDropdown) { activeDropdown.style.display = 'none';