PGR21.com
- PGR21 관련된 질문 및 건의는 [건의 게시판]을 이용바랍니다.
- (2013년 3월 이전) 오래된 질문글은 [이전 질문 게시판]에 있습니다.
통합 규정을 준수해 주십시오. (2015.12.25.)
Date 2023/10/12 17:19:15
Name ArcanumToss
Subject [질문] 자바스크립트 질문 (수정됨)
1.
body에는 다음과 같은 태그를 작성합니다.

<body>
        <img src="1.gif">
        <img src="2.gif">
        ...
        <img src="999999.gif">
</body>


2.
javascript는 대충 다음과 같이 작성합니다.

<script>
window.addEventListener("load", () => {
        imgs = document.getElementsByTagName(`img`);

        for(var i = 0; i < imgs.length; i++){
                imgs[i].addEventListener("click", () => {
                        // 클릭한 element의 this나 index를 알면 되는데...
                        // '1.gif'를 클릭했을 때 실행할 내용.
                        // '2.gif'를 클릭했을 때 실행할 내용.
                        alert("이미지를 클릭함");
                });
        }
});
</script>


이미지를 click하면 "imgs[i].addEventListener("click", ............"이 있으니 click 이벤트를 감지해서 alert("이미지를 클릭함");이 실행됩니다.
여기서 질문입니다.
문제는 '1.gif', '2.gif' 중 어떤 이미지를 눌렀는지 판별할 수 없다는 것입니다.
물론 태그를 다음과 같이 작성하면 되긴 하겠죠?

<img src="1.gif" onclick="img_click(this);">
<img src="2.gif" onclick="img_click(this);">
...
<img src="999999.gif" onclick="img_click(this);">

그리고 이것에 맞춰서 자바스크립트를 다음과 같이 작성하고요.
function img_click(t) {
        alert(t.src);
}

그런데 제가 궁금한 것은 이 방법을 쓰지 않고도 이 방법과 같은 효과를 낼 수 있는 방법입니다.

물론, 편법적으로 imgs[i].outerHTML = imgs[i].outerHTML.replace(`.gif">`, `.gif" onclick="img_click(this);"`)와 같이 하는 방법이 있긴 하겠지만 이렇게 하느니 태그에 onclick="img_click(this);"를 삽입하는 게 훨씬 효율적이겠죠.

idx= [].indexOf.call( imgs, 디스 )와 같은 라인으로 작성하려 해도 디스(this)는 필요한 터라...
방법이 있을까요?
그냥 다음과 같이 작성하는 게 유일한 방법일까요?

<img src="1.gif" onclick="img_click(this);">
<img src="2.gif" onclick="img_click(this);">
...
<img src="999999.gif" onclick="img_click(this);">

통합규정 1.3 이용안내 인용

"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.
법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
멍충이
23/10/12 17:30
수정 아이콘
imgs[i].addEventListener("click", (e) => {
console.log(e.target.src);
});
ArcanumToss
23/10/12 17:38
수정 아이콘
오!!!!!
e.target
요 방법이 있었군요.
e.src로 안 되길래 모르겠어서 질문을 올렸는데 target를 넣으면 되는 거였다니~~!!!!
하..... 고맙습니다.
긴 씨름이 끝났네요~~~~
23/10/12 17:46
수정 아이콘
본문 내용과는 약간 거리가 있는 내용이긴 하지만 <img> 요소 개수가 많을 경우 각각의 <img> 요소에 일일이 이벤트 리스너를 붙이지 않고, <img> 들을 감싸고 있는 부모 요소 (저기서는 <body>)에만 이벤트 리스너를 붙여도 처리할 수 있습니다.

https://ko.javascript.info/event-delegation

document.body.addEventListener("click", (e) => {
if (e.target.tagName !== "IMG") return;
// event.target으로 원하는 작업 하기
})
ArcanumToss
23/10/12 18:13
수정 아이콘
그렇군요.
if (e.target.tagName !== "IMG") return;
// event.target으로 원하는 작업 하기
})

e.target을 쓰는 방법을 알고 나니 이런 방법도 쓸 수 있다는 걸 알게 되네요.
여러 방법들 중에 제가 만드는 컨텐츠에 가장 효율적인 방법을 좀더 생각해 볼 수 있게 됐습니다.
고맙습니다.
ArcanumToss
23/10/12 19:14
수정 아이콘
이 방법을 테스트 해 보니 img를 누르면 해당 img에 해당하는 기능을 실행하고 img 바깥(div)을 클릭하면 div의 display를 none으로 바꾸는 경우에 쓰면 딱이네요.
이 방법을 알기 전에는 다른 방법으로 구현했었는데 이게 훨씬 심플하군요.
덕분에 더 편한 방법을 찾았네요~ : )
당근병아리
23/10/20 10:37
수정 아이콘
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회
176472 [질문] 고지혈증 관련된 컷이 있는 예능 방송영상이 궁금해요. [1] ski~5362 24/05/30 5362
176471 [질문] 마이크 타이슨 vs 유튜버 경기 아직 안했나요? [1] 완성형폭풍저그6286 24/05/30 6286
176470 [질문] 패키지여행 혼자 가보신분? [3] 삼성시스템에어컨5655 24/05/30 5655
176469 [질문] KT 인터넷이 자꾸 끊깁니다 [6] 와구와구하지망6110 24/05/30 6110
176468 [질문] 현 상황에서 코인 파는게 맞을까요? [18] K59035 24/05/30 9035
176467 [질문] 부동산 특약에 적힌 내용을 따라야 하는 관계자는 어디까지일까요? [4] 43년신혼1년6219 24/05/30 6219
176466 [질문] (뻘궁금 주의) 컴퓨터 사용 시간 [14] 니체7138 24/05/30 7138
176465 [질문] 부모님 컴퓨터 견적 이륙 허가 부탁드립니다~ [7] LCK제발우승해8496 24/05/29 8496
176464 [질문] Lol 오류때문에 삭제하고 싶은데 삭제가 안됩니다 [2] 엔쏘7225 24/05/29 7225
176463 [질문] psn 카카오페이 결제가 안 됩니다 [2] 김경호6973 24/05/29 6973
176462 [질문] 무알콜 맥주 중에 맥주와 가장 비슷한 게 뭘까요? [21] 아엠포유9007 24/05/29 9007
176461 [질문] 혹시 이 제품 영양정보 당 함유량이 왜 0% 인지 아시는 분 있을까요? [10] 코기토8229 24/05/29 8229
176460 [질문] 해운대역 근처 맛집 문의 드립니다. [15] 수타군6446 24/05/29 6446
176459 [질문] 계란 유통기한 잘 지키면서 드시나요? [12] 라리9504 24/05/29 9504
176458 [삭제예정] 사무실에 덩치가 크신분이 오셨습니다. 여름철문제 [32] 윤석열8763 24/05/29 8763
176456 [질문] 데스크탑 견적 요청 드립니다 [8] 키작은나무7717 24/05/29 7717
176455 [질문] 요즘 sns에서 많이 보이는 모발이식 광고 질문이요! [2] 여포6093 24/05/29 6093
176454 [질문] 22개월 아기가 화를 낼때 분노(?)를 합니다. [23] 카즈하8170 24/05/29 8170
176453 [질문] 전세대출 개념이 궁금합니다. [16] 수지짜응7027 24/05/29 7027
176452 [질문] 라오스 여행 갑니다. [2] BISANG5899 24/05/29 5899
176451 [질문] 경력 없는 사회과학 박사 수료생(혹은 중도포기생?)에게 맞는 일자리 옵션이 있을까요? [12] 휵스6456 24/05/29 6456
176449 [질문] 슬랙, 디스코드 등 알림이 잘 안오는 문제 [4] 붕붕붕6364 24/05/29 6364
176448 [질문] 온라인으로 비행기 티켓을 구매했는데 발권 안된 상태에서 수수료없이 취소 가능한가요? [6] 씨드레곤7579 24/05/28 7579
목록 이전 다음
댓글

+ : 최근 1시간내에 달린 댓글
+ : 최근 2시간내에 달린 댓글
맨 위로