장바구니 선택시 Sweetalert사용하는데 창이 꺼집니다.
본문
안녕하세요.
비전공자인데 어찌다보니 쇼핑몰을 수정하고있습니다.
현재 영카트5를 사용중이며
쇼핑몰 상세 페이지에서 장바구니를 클릭했을대 뜨는 alert창을
sweetalert를 사용중인데 이게 일반 소스에서는 잘사용됩니다만
item.form.skin.php내에
fitem_submit(f)함수 안에서는 창이 떳다가 바로 사라져버리고 아무것도 할수가 없습니다.
가장 기본적인 창을 뛰워도 무조건 창이 떳다가 사라져버럽니다.
어떻게 해결해야할까요? 이걸로 인한 소스수주정은 아래 설명드리는 부분이 전부이빈다.
아래에
add_javascript('<script src="https://unpkg.com/sweetalert/dist/sweetalert.min.js"></script>', 10);
추가하고
function fitem_submit(f) 함수안에 swal 함수 추가했습니다.
<?php
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
// add_stylesheet('css 구문', 출력순서); 숫자가 작을 수록 먼저 출력됨
add_stylesheet('<link rel="stylesheet" href="'.G5_SHOP_CSS_URL.'/style.css">', 0);
add_javascript('<script src="https://unpkg.com/sweetalert/dist/sweetalert.min.js"></script>', 10);
?>
<div id="sit_ov_from">
<form name="fitem" method="post" action="<?php echo $action_url; ?>" onsubmit="return fitem_submit(this);">
<input type="hidden" name="it_id[]" value="<?php echo $it_id; ?>">
<input type="hidden" name="sw_direct">
<input type="hidden" name="go_cart">
<input type="hidden" name="url">
....
function fitem_submit(f)
{
f.action = "<?php echo $action_url; ?>";
f.target = "";
if (document.pressed == "장바구니") {
// var msg = confirm('장바구니에 담았습니다. \n바로 확인하시겠습니까?');
// if( msg )
// f.go_cart.value = 1;
// else
// f.go_cart.value = 0;
swal({
title : "장바구니에 담았습니다.",
text : "장바구니로 이동하겠습니까?",
buttons : {
cancle : {
text : "계속쇼핑",
value : false
},
confirm : {
text : "장바구니이동",
value : true
},
},
})
.then((value) => {
if (value) {
//이동버튼
f.go_cart.value = 1;
}else
{
f.go_cart.value = 0;
}
});
} else { // 바로구매
f.sw_direct.value = 1;
}
...
..
!-->
답변 1
해당 방법처럼 소스를 구성할 수 없습니다
자바스크립트는 동시에, 즉 동기적 프로그래밍이기 때문에
해당 함수가 실행되고 결과값이 나와야 아래의 구문이 실행되는것이 아닌,
swal 팝업창이 뜨면 then에서 처리값이 받기전에 아래의 구문들을 다 실행해버립니다.
예외적으로 confirm이나 alert의 경우 브라우저 자체의 네이티브 함수여서 해당 함수가 실행되면
사용자가 클릭을 할때까지 모든 행동이 멈추지만
그외의 스크립트에선 해당 방법을 사용할 수 없습니다.
서브밋 이벤트 안에서 confirm이나 alert의 기능을 대체하려면 alert나 confirm을 대체하는 함수의 콜백 이벤트 안에 submit을 넣어주셔야 합니다.