개발 Q&A

제목 각각체크박스를 선택한것과 전체선택 버튼을 클릭하고 배열을 보냇을때 index 값이 다른이유가...
카테고리 JavaScript
글쓴이 정수리 작성시각 2016/12/08 11:19:14
댓글 : 5 추천 : 0 스크랩 : 0 조회수 : 16641   RSS

각각체크박스에 체크를하여 삭제하는 방식에서 

최상단의 체크박스를 클릭하면 전체 체크박스가 모두 선택&해제가 되도록하여 삭제를 하도록 하고 싶어서 

jquery에 최상단 체크박스 클릭시 체크박스가 모두 선택 및 해제가 되도록하였습니다. 

그리고 삭제를 한번해보았는데 삭제가 되지 않더라구요 

일단 삭제의 경우 jquery에서 배열로 삭제할 값들을 받아 ajax를 통해 php로 보내줍니다. 

브라우저 개발자도구로 살펴보았는데 

체크박스를 각각 클릭하고 삭제버튼을 클릭하면 

배열의 형태가 array(   [0]->array(             [0]->xxx             [1]->xxx .... 이런 형태이고 

전체체크박스를 클릭하고 삭제버튼을 클릭하면 

array(   [1]->array(             [0]->xxx             [1]->xxx .... 

이렇게 시작됩니다. 

종합적으로 이차배열의 첫번째 인덱스의 시작값이 다릅니다; 

각각선택하여 삭제버튼을 클릭했을 시 이차배열의 첫번째 인덱스는0 이고 

전체선택버튼을 클릭하여 전체선택 후  삭제버튼을 클릭했을 시 이차배열의 첫번째 인덱스는1 입니다. 

그렇다보니 전체 선택 버튼으로 전체선택 후 삭제 버튼을 클릭하면 삭제가 되지 않습니다. 

반복문을 통해 돌리는데 0번이라는 인덱스 값이 없기에 오류가 생겨 삭제가 되지 않는 것 같습니다. 

어떻게 해야 각각선택한것 같이 이차배열의 첫번째 인덱스 값이 0이 될수 있을까요?

 

$(document).on('click', '#allCheck', function(){//전체선택 JQUERY
       
      if($("#allCheck").prop("checked")) {
         
        $("input[type=checkbox]").prop("checked",true);
       
      } else {
         
        $("input[type=checkbox]").prop("checked",false);
      } 
  });
 
 
//데이터 삭제부분
for($i=0; $i<count($data); $i++){
      for($j=0; $j<count($data[0]); $j++){
        if($data[$i][0] == 1){
          $result =  $ck->query($sql, $data[$i][1]);
          }else{
          $result =  $this->db->query($sql2, $data[$i][1]);
          }
      }
   
    }

 

 다음글 안녕하세요. 클라이언트 쪽에서 엑셀 받는 작업을 하고 ... (1)
 이전글 인젝션 공격 중 이런걸 어떻게 막을 수 있을까요 ? (2)

댓글

배강민 / 2016/12/08 14:25:00 / 추천 0

$("input[type=checkbox]").prop("checked",true); 이거를 봐서는 특정 id를 가진 checkbox가 아닌 모든 checkbox 를 다 조작해서인듯합니다.

html을 보여주세요.

정수리 / 2016/12/08 14:29:25 / 추천 0
html코드는 이렇게 되어있습니다.
<table>	
		<tr>
			<th width="100">지역</th>
			<th width="18%">기관</th>
			<th width="100">점검일자</th>
			<th width="10%">프로그램</th>
			<th width="50%">점검사항</th>
			<th width="60">점검결과</th>
			<th width="10"><input type="checkbox" id="allCheck"/></th>
		</tr>
<?php
if(!empty($ck_list)){
	$a=1;
foreach($ck_list as $ck){
?>
	<tr id="tr_<?=$a?>" class="tr_style08">
		<input type="hidden" name="ck_pk" value="<?=$ck->ck_pk?>"/>
		<input type="hidden" name="gubun" value="<?=$ck->gubun?>"/>
		<td><p class="ck_detail"><?=$ck->gg_local?></p></td>
		<td ><p class="ck_detail"><?=$ck->gg_na?></p></td>
		<td><p class="ck_detail"><?= confirm($ck->ck_da)?></p></td>
		<td><p class="ck_detail"><?=$ck->pg_name?></p></td>
		<td class="tdst01"><p class="ck_detail"><?=$ck->ck_ct?></p></td>
		<td><?=($ck->ck_result == 1 or $ck->ck_result == '')?'<span class="td_style05">Y</span>':'N'?></td>
		<td><input type="checkbox"></td>
	</tr>
	<tr id="hd_<?=$a?>" style="display:none;">
		<!--<td class="tdst03"></td>-->
		<td colspan="8" class="tdst09"><div class="test"></div></td>
		</tr>
<?php
}
}
?>
</table>

 

배강민 / 2016/12/08 16:22:37 / 추천 0

대충 구성은 https://jsfiddle.net/ok57gsc2/ 이런식인듯 한데

<input type="checkbox"> 에 아무것도 없는데, 선택을하면 뭐가 넘어가는건가요?

정수리 / 2016/12/08 16:40:06 / 추천 0

@배강민

선택을 하면 hidden 처리가 되어 있는 ck_pk, gubun값이 넘어 갑니다.

현재 위 html의 경우 A테이블과 B테이블의 데이터를 uniall을 사용하여 출력하고 있습니다.

두개의 테이블이 내용이 출력이 되기에 ck_pk값만 넘길경우 이 ck_pk값이 A테이블의 데이터 인지 B테이블의 데이터 인지 구분이 

어려워 구분값을 넘겨 줍니다 구분값에 따라 delete쿼리의 table명이 바뀝니다

 

배강민 / 2016/12/09 14:14:55 / 추천 0
죄송하지만, 이유를 모르겠습니다.