셀렉트 박스 선택시 다중 선택 체크... > 그누4 질문답변

그누4 질문답변

그누보드4 관련 질문은 QA 로 이전됩니다. QA 그누보드4 바로가기
기존 게시물은 열람만 가능합니다.

셀렉트 박스 선택시 다중 선택 체크... 정보

셀렉트 박스 선택시 다중 선택 체크...

본문

<?
  $sp = ",";
        $options = '<option value="">선택▼</option>';
        $queryW = "SELECT mb_name FROM g4_member WHERE mb_4=1 ORDER BY mb_name";
        $resultW = mysql_query($queryW);
        while ( $rowW = mysql_fetch_assoc($resultW) )
        {
            $options.= '<option value="'.$rowW['mb_name'].$sp.'">'.$rowW['mb_name'].'</option>';
        }
        ?>
        <select id="mb_name" name="mb_name"
        onchange="document.getElementsByName('wr_tel')[0].value+=this.value;
            check.location.href='check_member.php?check_member='+this.value+'&wr_11=<?=$wr_link1;?>&wr_12=<?=$wr_link2;?>&wr_7=<?=$wr_7;?>&wr_8=<?=$wr_8;?>'">
        <?=$options?></select>
        <input type="text" id="wr_tel" name="wr_3" value="" style="width:68%; background-color:#FFFF99;" class="tx">





위의 소스에서 보시면

먼저 mb_name이 현재 로그인사용자($member[mb_name]) 같은 이름일 경우 select에서 제외...

그리고 한번 클릭한 목록은 선택이 안되도록 하고 싶습니다.



*본인 : 이순신



[선택 ▼] - 김유신            [input area                                        ]

              - 강감찬

              - 세종대왕

              - 이순신 <-이부분은 감춰야합니다;;





*1.강감찬 선택

[강감찬▼] [강감찬                                ]



*2.김유신 선택

[김유신▼] [강감찬,김유신                    ]



*3.다시 강감찬 선택

[김유신▼] [강감찬,김유신,강감찬          ]



위와 같이 같은 이름이 중복으로 들어가는 부분을 수정하고 싶습니다;
  • 복사

댓글 전체

전체 소스를 올려주심 좋을것 같구요..

$mb_name = "사용자이름"; 일 경우,
while 구문안에
{
  if($mb_name == "$rowW[mb_name]") { // 사용자 이름과 출력자 이름이 같을 경우..
    $options = "";
    } else { // 같지 않을 경우..
      $options = 기존대로 처리;
    }
}

이런식으로 하시면 될것 같습니다.

중복 부분은 onchange 부분 중..
value+=this 를
value=this 로 교체.
지나파파님 답변 감사합니다.

그러나 이 소스는 다중 사용자 체크 소스라고 보시면 됩니다.

member_table에서 mb_4=1인 회원만 불러와
Select 옵션에 자동적으로 나열 됩니다.

이때 자동적으로 불러오는 목록(셀렉트 BOX)에서
본인은 제외를 시키는 것입니다.

$options가 .을 이용해 연속 나열 됩니다;


또한 다중 참석자로 추가하기 때문에 "Value+=this"는 사용해야 합니다.

아마 스크립트에서  Value 값을 자동으로 추가되는 값을 기억해서 넣을때

차단(alert창) 해야할듯 싶습니다.

물론 값 넘어가면서 동일한 이름은 삭제하겠지만, 셀렉트 => 인풋에 값이 자동적으로

넘어가 추가가 되는 부분이라...이때는 onchange 하면 이벤트가 발생 되어야 하구요...


check.location.href='check_member.php?check_member='+this.value+'&wr_11=<?=$wr_link1;?>&wr_12=<?=$wr_link2;?>&wr_7=<?=$wr_7;?>&wr_8=<?=$wr_8;?>'">
이부분은 자바스크립트로 일정일시 중복 체크하는 부분이라 iframe으로 넘긴거라 참고만 하시구요..
<select id="mb_name" name="mb_name"
        onchange="document.getElementsByName('wr_tel')[0].value+=this.value;

 이부분을 우선
  <select id="mb_name" name="mb_name"
        onchange="javascript:rundata(this.form);"> 으로 변경하시구요
혹 form 테그 밖에 있거나 <form> 테그 없이 작성된경우라면
  <select id="mb_name" name="mb_name"
        onchange="javascript:rundata(this.value);">

로 변경하시구요

적절한 위치에 (모르겟으면 코드 맨 아래에 추가)
<script language='javascript'>
function rundata(form) { // 역시 <form>테그 없거나 폼테그밖에서 사용된경우라면 function rundata(vals); 로 하시구요

var obj = document.getElementsByName('wr_tel')[0];

var strs = obj.value.split(","); // 구분자를 컴마(,)로 하신것 같으니 이걸로 분배합니다
var isuse = false;

for(var i=0;i<strs.length;i++) {

  if(strs[i] == form.mb_name.value) {
  //위 부분역시 <form>테그 없거나 <form>테그 밖에서 사용된경우라면
//if(strs[i] == vals) { 로 작성하세요
    isuse=true;
    break;
  }
}
if(isuse)  return false; // 혹시 이 구문때문에 페이지가 새로 고쳐지면서 false 라고 출력된다면 그냥 return; 으로 작성하세요
obj.value+=form.mb_name.value; //마찬가지입니다. 폼테그 없거나 밖에서 사용된경우면 +=vals; 입니다.


check.location.href='check_member.php?check_member='+form.mb_name.value+'&wr_11=<?=$wr_link1;?>&wr_12=<?=$wr_link2;?>&wr_7=<?=$wr_7;?>&wr_8=<?=$wr_8;?> //마찬가지겠죠 폼테그 없거나 밖에서 사용된경우면 ='+vals+'.... 가 맞습니다.
}
</script>
이렇게 하면 중복처리 효과를 볼수 있습니다.
말씀하신대로 form안에 넣었습니다. 그런데, 중복체크 스크립트는 오류가 없는데, 중복체크를 안합니다.ㅠㅠ

 <script language='javascript'>
    function rundata(form) {   
    var obj = document.getElementsByName('wr_name')[0];
   
    var strs = obj.value.split("\n"); // 구분자를 엔터(\n)
var isDupl = true; //중복체크 사용

    for(var i=0;i<strs.length;i++) {

      if(strs[i].value == strs[i].value) {
    //넘어온 배열값중에 중복값이 존재해면
        isDupl = false;
        break;
      }
    }
    if(isDupl){
    obj.value+=form.mb_name.value;
    }
}
</script>

이렇게 수정해 보는데도 안되네요...
mb_name은 textarea로 수정하였습니다.

form.mb_name[i].value를 사용해야할거 같은데요..ㅠㅠ
© SIRSOFT
현재 페이지 제일 처음으로