1) select :: 내가 사용한 select 코드는 이렇다.
value2를 따로 지정 하지않아도 되지만 처음에 헷갈려서 value2를 따로 지정해 둠.
<select id="option_list">
<option value="" value2="">==옵션을 선택하세요==</option>
<option value="300000" value2="20평">20평</option>
<option value="500000" value2="30평">30평</option>
<option value="650000" value2="40평">40평</option>
</select>
2) 선택한 option value값을 배열에 넣어 중복요소들을 제거한다.
함수 밖
optionNameArray = new Array // 배열 하나를 만든다.
함수 안
a) 변수 선언
var optionName = document.getElementById('option_list');
var optionText = optionName.options[optionName.selectedIndex].getAttribute('value2');
value2는 엄밀히 말하면 value의 짭(?) 느낌으로 지정 해 둔 거라 getAttribute를 사용해 값을 가져와야한다.
b) 배열 요소들 중에 중복값 제거하기
optionNameArray.push(optionText); //선택된 옵션명 전부 새 배열에 넣기
const nameset = new Set(optionNameArray); //set객체 이용해서 중복값을 제거
let name = "";
nameset.forEach((item) => { name += item + "<br>"; }) //중복값 뺀 요소들을 빈 문자열에 집어넣기
document.querySelector('.option_box').innerHTML = name; // 화면에 선택한 option명들을 출력한다.
*이 때 Array.isArray(nameset)을 해 보면 nameset이 배열이 아님을 확인할 수 있다.
c) 중복값 찾기
const findName = arr => arr.filter((item, index) => arr.indexOf(item) !== index); //중복값 찾는 함수
const duplicateName = findName(optionNameArray); // 함수에 optionNameArray(선택한 옵션들) 넣음
var duplicateNameArray = [...duplicateName ]; //배열로 만들어준다.
d) 선택한 옵션이 중복 값 배열 안의 요소와 일치 할 경우 경고창 띄우기
for (i = 0; i < 4; i++) {
if (optionText == duplicateNameArray[i]) {
alert('이미 추가 된 옵션입니다.');
var res = optionName.querySelectorAll('option')[0].selected = 'selected' //select 초기화
return res;
}
}
내가 만들었다.^^ 뿌듯..
for문을 이용해서 option을 선택 할 때마다 중복배열에 들어있는 요소들과 매치시켜본다.
중복값이 있다면 경고창을 띄우고, select를 초기화시킨다.
b는 화면에 선택한 옵션명을 중복값을 제외하여 출력하도록 해주고
c,d는 중복값을 택했을 경우 경고창을 띄워주는 목적이다.
디버깅을 해 보면 이해가 좀 더 잘 된다!
Code pen
See the Pen Untitled by yeaseula (@yeaseula) on CodePen.
'개발 > javascript' 카테고리의 다른 글
[jQuery]$(window).scroll() 활용 / scroll 이벤트 +예제 (0) | 2022.12.28 |
---|---|
간단하게 마우스커서 이미지 변경 (다양한 조건에 따라 커서 커스텀 하기) (2) | 2022.12.15 |
배열에서 최소값 찾기 / 삭제하기 (apply, slice활용) (0) | 2022.12.11 |
swiper 2개 연동 - 서로 크기가 다른 슬라이드일 때 (0) | 2022.11.06 |
마우스 오버 이미지 변경하기 (:hover / js 뭐가 더 나을까? ) (0) | 2022.10.03 |