// ============================================ // 文件: js/main.js // 说明: 全站公共脚本。add.php 与 edit.php 的「一起看的人 / 电影院」 // 表单联动逻辑集中在此,避免两个页面各写一份。 // ============================================ document.addEventListener('DOMContentLoaded', function() { console.log('🎬 电影日志系统已加载'); }); function formatDate(dateStr) { if (!dateStr) return ''; const d = new Date(dateStr); return d.getFullYear() + '年' + String(d.getMonth() + 1).padStart(2, '0') + '月' + String(d.getDate()).padStart(2, '0') + '日'; } // ---------- 一起看的人 ---------- // 下拉框切到「新增」时显示姓名输入框 function toggleNewViewer(select) { var parent = select.parentElement; var input = parent.querySelector('input[name="viewers_new[]"]'); if (select.value === 'new') { input.style.display = 'block'; input.required = true; } else { input.style.display = 'none'; input.required = false; input.value = ''; } } // 删除一行观影人(至少保留一行) function removeViewerRow(btn) { var container = document.getElementById('viewerContainer'); if (container.children.length > 1) { btn.parentElement.remove(); } } // ---------- 电影院 ---------- // 下拉框切到「新建电影院」时显示新建表单 function toggleNewCinema() { var select = document.getElementById('cinemaSelect'); var group = document.getElementById('newCinemaGroup'); group.style.display = select.value === 'new' ? 'block' : 'none'; } // ---------- 图片破图回退 ---------- // 服务端代理模式下,图片需要登录才能读取(media.php 未登录返回 403)。 // 会话过期后页面上的图片会加载失败——统一替换为内联占位图,避免满屏破图。 // 注意:error 事件不冒泡,必须用捕获阶段监听;占位图用 data URI,不依赖任何文件。 (function () { var PLACEHOLDER = 'data:image/svg+xml;charset=utf-8,' + encodeURIComponent( '' + '' + '图片不可用'); document.addEventListener('error', function (e) { var el = e.target; if (!el || el.tagName !== 'IMG') return; if (el.dataset.fallbackApplied === '1') return; // 防死循环 el.dataset.fallbackApplied = '1'; el.src = PLACEHOLDER; }, true); })();