이 레이아웃은 동적으로 만들어졌습니다.
for (let i = 1; i < 10; i++) {
document.querySelector('.card-body').innerHTML += `<div class="row" id="img_div">
<div class="col-12 col-sm-12 col-md-2 text-center">
<img src="http://placehold.it/120x80" alt="prewiew" width="120" height="80">
</div>
<div id="text_div" class="col-12 text-sm-center col-sm-12 text-md-left col-md-6">
<h4 class="name"><a href="#" id="title` + i + `">Name</a></h4>
<h4>
<small>state</small>
</h4>
<h4>
<small>city</small>
</h4>
<h4>
<small>zip</small>
</h4>
</div>
<div class="col-12 col-sm-12 text-sm-center col-md-4 text-md-right row">
</div>
</div>
`
document.getElementById("title" + i).addEventListener('click', function() {
console.log(i)
});
}
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<div class="card-body">
<!-- person -->
</div>
그리고 각 이벤트를 클릭하고 관련 h4 class="name"
번호가있는 로그를 표시 하고 싶습니다 i
.
그러나 console.log
마지막 i
관련 항목 만 표시하고 ( i=9
이 경우) 다른 i
숫자 와는 작동하지 않습니다 . 왜 이런 일이 발생합니까? 어떻게해야합니까?
3
어쩌면 html-string을 전달하는 대신 Document.createElement ()를 사용하면 시간이 훨씬 쉬워 질 것입니다. 결국 더 나은 코드로 끝날 것이라고 생각합니다.
—
admcfajn
노드를 다시 반복하고 문자열에 연결할 수없는 이벤트를 연결해야합니다
—
Eugen Sunic
좋은 질문은 확실히 까다로운 일입니다. 렌더링 후 이벤트를 처리하는 것이 가능할 수 있다고 생각합니다
—
Pogrindis
for
. jsFiddle을 테스트합니다.
에 대한 위임 된 이벤트 핸들러를 작성
—
hungerstar
.card-body
하고 요소 ( target
)가로 시작하는 앵커 및 ID인지 확인하십시오 title
.
아, 그냥 답변을 게시하려고합니다. 다시 열기로 투표 클로저는 필요하지 않습니다. 문제는 클로저가 아니라
—
ggorlen
innerHTML += ...
이전에 설정된 이벤트 리스너를 종료하는 것입니다. document.createElement
대신 사용하십시오 .