만약 이벤트 리스너를 호출했다고 했을 떄
const countEvent = (valueForCalc)=> {
countCalc(valueForCalc);
$count.textContent = count;
}
이렇게 있을 때
$h1.addEventListener('click', countEvent(1));
이렇게 추가하면 안됨. 이거는 그냥 함수를 호출한 거임.
let count = 0;
const countEvent = (e)=> {
countCalc(e.currentTarget.countValue);
$count.textContent = count;
}
$h1.countValue = 1;
$plusBtn.countValue = 1;
$minusBtn.countValue = -1;
$addEventBtn.addEventListener('click', ()=>{
$h1.addEventListener('click', countEvent);
$plusBtn.addEventListener('click', countEvent);
$minusBtn.addEventListener('click', countEvent);
});
$removeEventBtn.addEventListener('click', ()=>{
$h1.removeEventListener('click', countEvent);
$plusBtn.removeEventListener('click', countEvent);
$minusBtn.removeEventListener('click', countEvent);
});
function countCalc(valueForCalc){
if( count + valueForCalc > MAX || count + valueForCalc < MIN){
return;
}
count = count + valueForCalc;
}
결국 콜백함수를 이벤트로써 쓸 때는 인자를 event 인자를 받을 수 밖에 없다.
그럴 땐 그냥 위 처럼 임의의 필드를 만들어서 값을 지정해주고, 활용해 주면된다.
$h1.countValue = 1;
이렇게 하면, 그냥 countValue라는 필드가 생기고 거기에 1 이라는 값이 들어간다.
이 값에 접근할 때는
e.currentTarget.필드이름
이렇게 접근한다.
const countEvent = (e)=> {
countCalc(e.currentTarget.countValue);
$count.textContent = count;
}
'프론트엔드-코드 > Javascript' 카테고리의 다른 글
문자열 메소드 (0) | 2023.09.12 |
---|---|
라이브 scss(sass) 확장프로그램 설정 (0) | 2023.09.08 |
timeout, interval 종료. (0) | 2023.09.08 |
부모 선택 (0) | 2023.09.07 |
객체 이동 (0) | 2023.09.07 |