function 실행 후 새로고침 하는 법?
본문
안녕하세요?
아래 스크립트 실행 후 새로고침을 실행하려고 합니다.
어떻게 하면 좋을까요?
마지막 return false; 바로 아래에 location.reload(); 코드를 넣으면 작동이 안 되고,
바로 위에 넣었더니, 작동은 되는데 function 이벤트가 적용이 안 되네요. ㅜ
<script type="text/javascript">
function googleTranslateElementInit() {new google.translate.TranslateElement({pageLanguage: 'ko',autoDisplay: true}, 'google_translate_element');}
/* 새 UI 선택 클릭 이벤트가 발생하면
감춤 처리한 구글 번역 콤보리스트에
선택한 언어를 적용해 변경 이벤트를 발생시키는 코드 */
document.querySelector('.translation-links').addEventListener('click',trans);
function trans(event) {
let el = event.target;
if(el != null){
while(el.nodeName == 'FONT' || el.nodeName == 'SPAN'){el = el.parentElement;}
const tolang = el.dataset.lang; // 변경할 언어 코드 얻기
const gtcombo = document.querySelector('.goog-te-combo');
if (gtcombo == null) {
alert("Error: Could not find Google translate Combolist.");
return false;
}
gtcombo.value = tolang; // 변경할 언어 적용
gtcombo.dispatchEvent(new Event('change')); // 변경 이벤트 트리거
}
document.body.style.cssText = "";
return false;
};
</script>
답변 5
return false;
→
setTimeout(function() { window.location.reload(); }, 1000);
return false;
내용상으로 봤을때는 말씀하신것처럼 리로드가 되면 function이 실행 안되실듯 합니다.
리로드 하셔야 되는 부분을 ajax로 구현하시는게 나을듯 합니다.
새로고침 하는 부분이 없는데요?
리로드 한다해도 펑션상태를 알수 없기 때문에 의미가 없습니다.
어차피 리로드 펑션 리로드 펑션.. 해봤자 현재 상태 저장이 불가.
따라서 페이지 새로고침이 아닌 ajax 를 통하여 데이터를 가져오는게 좋아보일듯합니다.
부득이하게 리로드 해야겠다면 언어코드를 get 이나 post 파라미터로 보내서
리로드 후에도 펑션값이 유지되게 하세요.
다음과 같은 방법도 있으니 참고해 보세요
document.querySelector('.translation-links').addEventListener('click', trans);
function trans(event) {
let el = event.target;
if (el != null) {
while (el.nodeName == 'FONT' || el.nodeName == 'SPAN') {
el = el.parentElement;
}
const tolang = el.dataset.lang; // 변경할 언어 코드 얻기
const gtcombo = document.querySelector('.goog-te-combo');
if (gtcombo == null) {
alert("Error: Could not find Google translate Combolist.");
return false;
}
gtcombo.value = tolang; // 변경할 언어 적용
gtcombo.dispatchEvent(new Event('change')); // 변경 이벤트 트리거
}
document.body.style.cssText = "";
// 새로고침 실행
location.reload();
// 기본 동작 막기
event.preventDefault();
}
답변을 작성하시기 전에 로그인 해주세요.