javascript confirm 질문입니다 ㅠㅠ

javascript confirm 질문입니다 ㅠㅠ

QA

javascript confirm 질문입니다 ㅠㅠ

본문

위시리스트의 전체삭제 관련인데요.

 


if (act == "alldelete")
        {
            var allInp = document.getElementsByTagName("input");
            for (var i=0, max=allInp.length; i <max; i++)
            {
                if(allInp[i].type === 'checkbox'){
                    allInp[i].checked = true;
                }
            }
            if(confirm("정말 삭제하시겠습니까?")) {
                f.act.value = act;
                f.submit();
            } else {
                return;
            }
        }

 

위의 코드인데..

confirm 박스가 뜨기전에 input들을 모두 체크해주고 싶은데

위의 코드는 컨펌박스가 없어져야 input 들이 모두 체크됩니다;

 

함수로 만들어도 마찬가지고

제이쿼리로 해도 마찬가지네요 ㅠ

 

이 질문에 댓글 쓰기 :

답변 7

이렇게 해도 될까요?

confirm yes면, checked 하고 submit


if (act == "alldelete")
{
 if(confirm("정말 삭제하시겠습니까?")) {
  var allInp = document.getElementsByTagName("input");
  for (var i=0, max=allInp.length; i <max; i++)
  {
   if(allInp[i].type === 'checkbox'){
    allInp[i].checked = true;
    return;
   }
  }
  f.act.value = act;
  f.submit();
 } else {
  return;
 }
}

제가 해봤는데 ㅋ
마찬가지예요 ㅋㅋㅋ

일단 if (confirm()) {
여기 안에 코드가 들어가 있으면
confirm 값의 유무에 따라 결정되니까요

전 act 값이 alldelete 일때 실행하고 싶습니다..!

근데 웃긴게..
for는 돈다는거예요;;
console 찍어보면 찍히는게 참 ㅠㅠ

 var i_check = 1; //for문이 돌아가면 +1

if(allInp.length == i_check){ input개수와 동일하면 실행


if (act == "alldelete")
{
 var i_check = 1;
 var allInp = document.getElementsByTagName("input");
 for (var i=0, max=allInp.length; i <max; i++)
 {
  if(allInp[i].type === 'checkbox'){
   allInp[i].checked = true;
  }
  i_check++;
 }
 if(allInp.length == i_check){
  if(confirm("정말 삭제하시겠습니까?")) {
   f.act.value = act;
   f.submit();
  } else {
   return;
  }
 }
}

전체소스입니다;


<?php
include_once('./_common.php');

if (!$is_member)
    goto_url(G5_BBS_URL."/login.php?url=".urlencode(G5_SHOP_URL.'/wishlist.php'));

if (G5_IS_MOBILE) {
    include_once(G5_MSHOP_PATH.'/wishlist.php');
    return;
}

// 테마에 wishlist.php 있으면 include
if(defined('G5_THEME_SHOP_PATH')) {
    $theme_wishlist_file = G5_THEME_SHOP_PATH.'/wishlist.php';
    if(is_file($theme_wishlist_file)) {
        include_once($theme_wishlist_file);
        return;
        unset($theme_wishlist_file);
    }
}

$g5['title'] = "관심 상품";
include_once('./_head.php');
?>
<!-- 위시리스트 시작 { -->
<div id="sod_ws">

    <form name="fwishlist" id="fwishlist" method="post" action="./wishaction.php">
    <input type="hidden" name="act"       value="multi">
    <input type="hidden" name="sw_direct" value="">
    <input type="hidden" name="prog"      value="wish">

    <div class="tbl_head01 tbl_wrap">
        <table>
			<thead>
				<tr>
					<th scope="col">
						<label for="ct_all" class="sound_only">상품 전체</label>
						<input type="checkbox" name="ct_all" value="1" id="ct_all" class="chk_cus_box">
					</th>
					<th scope="col">번호</th>
					<th scope="col">이미지</th>
					<th scope="col">상품명</th>
					<th scope="col">보관일시</th>
				</tr>
			</thead>
			<tbody>
				<?php
				// 회원인 경우
				if ($is_member){
					$sql_common = " from {$g5['g5_shop_wish_table']} where mb_id = '{$member['mb_id']}' ";
				} else {// 그렇지 않다면 로그인으로 가기 
					goto_url(G5_BBS_URL.'/login.php?url='.urlencode(G5_SHOP_URL.'/wishlist.php'));
				}

				// 테이블의 전체 레코드수만 얻음
				$sql2 = " select count(*) as cnt " . $sql_common;
				$row2 = sql_fetch($sql2);
				$total_count = $row2['cnt'];

				$sql  = " select a.wi_id, a.wi_time, b.* from {$g5['g5_shop_wish_table']} a left join {$g5['g5_shop_item_table']} b on ( a.it_id = b.it_id ) ";
				$sql .= " where a.mb_id = '{$member['mb_id']}' order by a.wi_id desc ";
				$result = sql_query($sql);

				$num = 0;
				$num = ($page + 1) * $total_count + $i;

				for ($i=0; $row = sql_fetch_array($result); $i++) {

					$out_cd = '';
					$sql = " select count(*) as cnt from {$g5['g5_shop_item_option_table']} where it_id = '{$row['it_id']}' and io_type = '0' ";
					$tmp = sql_fetch($sql);
					if($tmp['cnt'])
						$out_cd = 'no';

					$it_price = get_price($row);

					if ($row['it_tel_inq']) $out_cd = 'tel_inq';

					$image = get_it_image($row['it_id'], 70, 70);

					$num--;


				?>

				<tr>
					<td class="td_chk">
						<?php
						// 품절검사
						if(is_soldout($row['it_id']))
						{
						?>
						품절
						<?php } else { //품절이 아니면 체크할수 있도록한다 ?>
						<label for="chk_it_id_<?php echo $i; ?>" class="sound_only"><?php echo $row['it_name']; ?></label>
						<input type="hidden" name="out_cd_chk" value="<?php echo $out_cd; ?>"  class="chk_cus_box">
						<?php } ?>
						<input type="checkbox" name="chk_it_id[<?php echo $i; ?>]" value="1" id="chk_it_id_<?php echo $i; ?>">
						<input type="hidden" name="it_id[<?php echo $i; ?>]" value="<?php echo $row['it_id']; ?>">
						<input type="hidden" name="io_type[<?php echo $row['it_id']; ?>][0]" value="0">
						<input type="hidden" name="io_id[<?php echo $row['it_id']; ?>][0]" value="">
						<input type="hidden" name="io_value[<?php echo $row['it_id']; ?>][0]" value="<?php echo $row['it_name']; ?>">
						<input type="hidden" name="ct_qty[<?php echo $row['it_id']; ?>][0]" value="1">
					</td>
					<td class="td_num">
						<?php 
							// 음수를 양수로
							$str_num = str_replace('-','',$num);
							echo $str_num; 
						?>
					</td>
					<td class="sod_ws_img"><a href="./item.php?it_id=<?php echo $row['it_id']; ?>"><?php echo $image; ?></a></td>
					<td>
						<a href="./item.php?it_id=<?php echo $row['it_id']; ?>">
							<?php echo stripslashes($row['it_name']); ?>
							<?php if(is_soldout($row['it_id'])) { // 품절검사 ?>
								<span>품절</span>
							<?php } ?>
						</a>
					</td>
					<td class="td_datetime">
						<?php 
							echo str_replace(" ", "<br>",substr($row['wi_time'],2, -3)); 
						?>
					</td>
				</tr>
				<?php
				}

				if ($i == 0)
					echo '<tr><td colspan="5" class="empty_table">관심 상품이 없습니다.</td></tr>';
				?>
				</tr>
			</tbody>
        </table>
    </div>

    <div id="sod_ws_act">
        <?php if ($i != 0) { ?>
			<button type="button" class="btn_del" onclick="return fwishlist_check(document.fwishlist,'seldelete');" class="btn01">선택삭제</button>
			<button type="button" class="btn_del" onclick="return fwishlist_check(document.fwishlist,'alldelete');" class="btn01" id="btnDeleteAll">전체삭제</button>
		<?php } ?>
    </div>
    </form>
</div>

	


<script>
	// 모두선택
    $("input[name=ct_all]").click(function() {
        if($(this).is(":checked"))
            $("input[name^=chk_it_id]").attr("checked", true);
        else
            $("input[name^=chk_it_id]").attr("checked", false);
    });

	// 체크값에 따른 전체선택 변경
	$("input[name^=chk_it_id]").click(function(){
		if ($("input[name^=chk_it_id]").length == $("input[name^=chk_it_id]:checked").length)
		{
			$("input[name=ct_all]").attr("checked", true);
		} else {
			$("input[name=ct_all]").attr("checked", false);
		}
	});


    function fwishlist_check(f, act)
    {
        var k = 0;
        var length = f.elements.length;

        for(i=0; i<length; i++) {
            if (f.elements[i].checked) {
                k++;
            }
        }


		if (act == "alldelete")
		{
			var allInp = document.getElementsByTagName("input");
			for (var i = 0, max = allInp.length; i < max; i++)
			{
				if(allInp[i].type === 'checkbox'){
					allInp[i].checked = true;
				}
			}

			if(confirm("정말 삭제하시겠습니까?")) {
				f.act.value = act;
				f.submit();
			} else {
				for (var i = 0, max = allInp.length; i < max; i++)
				{
					if(allInp[i].type === 'checkbox'){
						allInp[i].checked = false;
					}
				}
				return;
			}
		}
		else
		{
			if($("input[name^=chk_it_id]:checked").size() < 1) {
			//var allInp = document.getElementsByTagName("input:checked");
			//if(allInp.length != 0) {
				alert("삭제하실 상품을 하나이상 선택해 주십시오.");
				return false;
			}

			if(confirm("정말 삭제하시겠습니까?")) {
				f.act.value = act;
				f.submit();
			} else {
				return;
			}
		}
        return true;
    }
</script>

function fwishlist_check(f, act)에서

if (act == "alldelete") 이부분만 고쳤어요


function fwishlist_check(f, act)
    {
        var k = 0;
        var length = f.elements.length;
        for(i=0; i<length; i++) {
            if (f.elements[i].checked) {
                k++;
            }
        }

  if (act == "alldelete")
  {
   $("input[name^=chk_it_id]").attr("checked", true);
   
   if ($("input[name^=chk_it_id]").length == $("input[name^=chk_it_id]:checked").length)
   {
     if(confirm("정말 삭제하시겠습니까?")) {
      f.act.value = act;
      f.submit();
     } else {
      $("input[name^=chk_it_id]").attr("checked", false);
      return;
     }
   }
  }
  else
  {
   if($("input[name^=chk_it_id]:checked").size() < 1) {
   //var allInp = document.getElementsByTagName("input:checked");
   //if(allInp.length != 0) {
    alert("삭제하실 상품을 하나이상 선택해 주십시오.");
    return false;
   }
   if(confirm("정말 삭제하시겠습니까?")) {
    f.act.value = act;
    f.submit();
   } else {
    return;
   }
  }
        return true;
    }

안되신다면 ㅠㅠ
if(confirm("정말 삭제하시겠습니까?")) { 이부분을
function 으로 따로 뺀다음에
setTimeout() 써서 시간을 좀 두고 실행시키면 될것 같은데요?

체크박스 함수의 콜백을 받아 컨펌창 실행

 


function all_check () {
var allInp = document.getElementsByTagName("input");
for (var i=0, max=allInp.length; i <max; i++) {
    if(allInp[i].type === 'checkbox'){
        allInp[i].checked = true;
    }
}
return true;
}
 
 
 if (act == "alldelete"){
        if(all_check()) {
            if(confirm("정말 삭제하시겠습니까?")) {
                f.act.value = act;
                f.submit();
            } else {
                return;
            }
        }
}

마찬가지입니다;
저도 함수만들어서 실행은 해봤는데..
왜 confirm 전에 뭐가 안되는지 모르겠네요;ㅣ


function all_check() {
			var allInp = document.getElementsByTagName("input");
			for (var i = 0, max = allInp.length; i < max; i++)
			{
				if(allInp[i].type === 'checkbox'){
					allInp[i].checked = true;
				}
			}
			return true;
		}

		if (act == "alldelete")
		{
			if (all_check())
			{
				if(confirm("정말 삭제하시겠습니까?"))
				{
					f.act.value = act;
					f.submit();
				}
				else
				{
					var allInp = document.getElementsByTagName("input");
					for (var i = 0, max = allInp.length; i < max; i++)
					{
						if(allInp[i].type === 'checkbox'){
							allInp[i].checked = false;
						}
					}
					return;
				}
			}
		}

var result = confirm("정말 삭제하시겠습니까?");

 

if (result) ...

는 시도해보았나요?

전역 변수로 K라는 변수 하나를 미리 선언하고 초기화 값을 0으로 넣은 다음(var k=0;) 

체크박스가 전부 체크되면 K 값을 1(var k=1;)로 바꾸도록 하고

컨펌의 if문 조건에 k값이 1이 참이라면 실행,

끝나면 k값을 다시 0이되도록 세팅.

이런식으로 하면 되지 않을까요?ㅎㅎ

왜인지는 모르겠으나

setTimeout 으로 해결했습니다..

모두모두 감사드립니다.


if (act == "alldelete")
        {
            function all_check() {
                console.log('dd');
                var allInp = document.getElementsByTagName("input");
                for (var i = 0, max = allInp.length; i < max; i++)
                {
                    if(allInp[i].type === 'checkbox'){
                        allInp[i].checked = true;
                    }
                }
                
                return true;
            }
            if (all_check())
            {
                window.setTimeout(function(){
                    var result = confirm("정말 삭제하시겠습니까?");
                    if(result)
                        {
                            f.act.value = act;
                            f.submit();
                        }
                        else
                        {
                            var allInp = document.getElementsByTagName("input");
                            for (var i = 0, max = allInp.length; i < max; i++)
                            {
                                if(allInp[i].type === 'checkbox'){
                                    allInp[i].checked = false;
                                }
                            }
                            return;
                        }
                }, 100);
            }
        }
답변을 작성하시기 전에 로그인 해주세요.
전체 27
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT