최근 며칠 동안 약간의 문제가있었습니다. 나는 가능한 한 내 코드를 간소화하려고 노력하고 있으며 JavaScript를 통해 Event Listeners를 추가하려고하는 단계에 이르렀습니다. 따라서 HTML이 좀더 세련되게 보입니다.배열 및 FOR 루프를 통해 이벤트 리스너 추가
-HTML 세그먼트
<input type="button" id="googleSearchButton" />
<input type="button" id="youtubeSearchButton" />
<input type="button" id="wikiSearchButton" />
<input type="button" id="facebookSearchButton" />
<input type="button" id="twitterSearchButton" />
<input type="button" id="tumblrSearchButton" />
<input type="button" id="dropboxSearchButton" />
자바 스크립트 세그먼트
var contIDArray = ["google", "youtube", "wiki", "facebook", "twitter", "tumblr", "dropbox"];
window.load = initAll();
function initAll(){
applyProperties();
}
function applyProperties(){
for (var i = 0; i < contIDArray.length; i++){
addEventListeners(contIDArray[i] + "SearchButton");
}
}
function addEventListeners(id){
document.getElementById(id).addEventListener("click", testAlert(id), false);
}
function testAlert(id){
alert(id + " clicked")
}
이론
으로, 나는 당신이 볼 수있는 희망 루프 의지 루프에 대한 컨테이너 배열의 값이 다 떨어질 때까지 매번 Array의 위치에 "SearchButton"을 출력합니다. 예를 들어 처음으로 루프가 실행되면 "googleSearchButton", 두 번째로 "youtubeSearchButton"등이 출력됩니다.
이제는 프로젝트의 다른 세그먼트에 Button 값과 텍스트 상자 자리 표시 자 텍스트를 적용하기 위해 FOR 루프를 사용하여 속성을 적용하는 것으로 알고 있습니다.
간단한 테스트 기능 ("testAlert()")을 추가하고 호출 한 요소의 ID를 전달하도록 설정했습니다. 일단 이벤트 리스너가 추가되면 각 버튼을 클릭하기 만하면 id가 알려지며 클릭되었음을 알립니다.
문제점 이제
은, 이론적으로, 나는이 일 거라 생각 했어요. 그러나 FOR 루프는 "addEventListeners"함수를 발생시키고,이 함수는 이벤트 리스너를 추가하여 클릭시 "testAlert"를 발생시키는 것으로 보입니다. 그러나 이벤트 리스너를 추가하자마자 바로 "testAlert"기능을 시작하고 클릭 할 때 실행되지 않습니다.
사과를 많이 드려 죄송 합니다만, 나는 항상 내 설명의 길이를 과장합니다. 다행히도 내 설명보다는 내 코드에서 성취하려는 것을 볼 수 있기를 바랍니다.
도움을 많이 주시면 감사하겠습니다. :)
StackOverflow는 나를 놀라게하는 데 결코 실패하지 않습니다. 얼마나 빠르고 효과적으로 사용자가 나를 도울 수 있습니다. 고마워, 친구! 빈 함수 내에서 함수 호출을 중첩 할 필요성을 특별히 이해하지는 않지만 작동한다면 작동합니다. :) 또한 클래스 전체에서 진행되는 작업을 이해하지 못하고 지금 작동하므로 지금 알고있는 것에 충실합니다. 추가 노력에 감사드립니다! :) –
@ 벤 후퍼 : 천만에! 나는 사람들을 돕는 것을 좋아합니다. 어쨌든'addEventListener'가 함수를 넘겨주기를 기대하기 때문에'testAlert'를 함수에 넣어야합니다. 'testAlert (id)'를 실행하면 즉시 testAlert의 리턴 값 (아무 것도 반환하지 않았기 때문에'undefined ')을 이벤트 (함수 여야 함)로 할당합니다. . 수업 일은 단지 제안이었습니다. ID 배열을 만드는 대신 DOM 메서드를 사용하여 원하는 모든 요소의 목록을 가져온 다음 이벤트를 반복하고 추가하는 것이 좋습니다. –
아, 알겠습니다. 나는 네 제안 모두를 이해한다. 앞으로 이벤트 리스너를 추가 할 때마다 function() {functionName()} 메서드를 사용해야합니까? 그리고 그래, 그게 효과가있을 것 같아. 하지만 실제로 클래스 시스템과 함께 작동하지 않을 여러 다른 것들 함께 배열 및 FOR 루프를 사용하고 있습니다. 그러나 예, 이것은 미래 코드에 대한 흥미로운 전망을 제공했습니다. 다시 한번, 감사드립니다. : D –