1. list.blade.php

@if($document->isEditable()) <form action="javascript:void(0);" method="post" class="toggle-secret-form" data-documentsrl="{$document->document_srl}"> <input type="hidden" name="document_srl" value="{$document->document_srl}" /> @if(!$document->isSecret()) <input type="hidden" name="status" value="SECRET"> <button type="submit">스레드 잠금 <i class="lock"></i></button> @else <input type="hidden" name="status" value="PUBLIC"> <button type="submit">잠금 해제하기</button> @endif <input type="hidden" name="xe_validator_id" value="{$_SESSION['XE_VALIDATOR_ID']}"> </form> @php // 비밀글 전환 처리 if ($_POST['status'] == 'SECRET' && isset($_POST['document_srl'])) { $obj = new stdClass(); $obj->document_srl = $_POST['document_srl']; $obj->secret = 'SECRET'; // status를 'SECRET'으로 설정 $query_path = $module_info->module."/skins/".$module_info->skin; // 쿼리 경로 $output = executeQuery($query_path.'.updateDocumentsSecret', $obj); // 쿼리 실행 } // 공개글 전환 처리 if ($_POST['status'] == 'PUBLIC' && isset($_POST['document_srl'])) { $obj = new stdClass(); $obj->document_srl = $_POST['document_srl']; $obj->secret = 'PUBLIC'; // status를 'PUBLIC'으로 설정 $query_path = $module_info->module."/skins/".$module_info->skin; // 쿼리 경로 $output = executeQuery($query_path.'.updateDocumentsSecret', $obj); // 쿼리 실행 // 페이지 리다이렉트 (새로고침 효과) } @endphp


2. script.js

document.querySelectorAll(".toggle-secret-form").forEach(function(form) { console.log('폼 감지됨'); // ✅ 폼이 감지되었는지 확인 form.addEventListener("submit", function(e) { console.log('비밀글 처리 이벤트 발생'); // ✅ 이벤트 바인딩 확인 e.preventDefault(); // 기본 폼 제출 방지 let formData = new FormData(this); let documentSrl = this.dataset.documentsrl; // CSRF 토큰 추가 (필요하면 설정) if (typeof XE_VALIDATOR_ID !== "undefined") { formData.append("xe_validator_id", XE_VALIDATOR_ID); } fetch("./", { method: "POST", body: formData }) .then(function(response) { // ✅ 올바른 문법 window.location.reload(); // 페이지 새로고침 }) .catch(error => console.error("Error:", error)); }); });


1