2017-04-08 4 views
0

배열의 세 개의 요소 배열에 onclick 함수를 적용하려고했지만 배열의 onclick 속성을 설정하지 않아도됩니다. 어떤 아이디어라도 도움이 될 것입니다. 감사합니다.onclick 함수를 사용하여 배열에 액세스하려고 시도했습니다

var btnArray = [ 
document.getElementById('buttonOne'), 
document.getElementById('buttonTwo'), 
document.getElementById('buttonThree'), 
]; 
console.log(btnArray); 
btnArray.onclick = function revilImg() { 
console.log('hey'); 
} 

답변

2

배열에는 onclick 속성이 없습니다. ,

var buttons = [ 
 
    'buttonOne', 
 
    'buttonTwo', 
 
    'buttonThree' 
 
].map(document.getElementById, document) 
 

 
console.log(buttons) 
 

 
function revealImage() { 
 
    console.log('hey') 
 
} 
 

 
buttons.forEach(function (e) { 
 
    e.addEventListener('click', revealImage) 
 
})
<button id="buttonOne">#1</button> 
 
<button id="buttonTwo">#2</button> 
 
<button id="buttonThree">#3</button>

+1

은 어디에서 찾을 않았거나 알고 : 당신은 첫 번째 (내가 Array#forEach을 사용하기로 선택한)를 통해 으로 반복 필요하고, 각 DOM 요소에 핸들러를 첨부 개별적으로 addEventListener를 사용하여 'document.getElementById'를 map 함수에 전달할 때'document'가 _thisArg_로 필요합니까? – LGSon

+1

@LGSon'document'는 단지'Document'의 인스턴스이며'getElementById'는'document'의 자체 속성 대신'Document.prototype'에 정의되어 있습니다. 'document.hasOwnProperty ('getElementById')'를 실행하면'false'로 표시됩니다. – gyre

+0

아, 고마워요. 플러스 1 : – LGSon

1

배열을 통해이 같이 어디 루프를 이벤트 리스너를 추가하고 버튼이를 공유하는 경우 각

var btnArray = [ 
    document.getElementById('buttonOne'), 
    document.getElementById('buttonTwo'), 
    document.getElementById('buttonThree'), 
]; 

console.log(btnArray); 

for (var i = 0; i < btnArray.length; i++){ 
    btnArray[i].addEventListener('click', function(){ 
    console.log('hey'); 
    }) 
} 

개체에 처리기를 추가 : 여기

내 코드입니다 공통 클래스, 즉 mybuttons을 사용할 수 있습니다. querySelecorAll()

var btnArray = document.querySelectorAll('.mybuttons'); 

console.log(btnArray); 

for (var i = 0; i < btnArray.length; i++){ 
    btnArray[i].addEventListener('click', function(){ 
    console.log('hey'); 
    }) 
} 
관련 문제