2017-12-31 117 views
1

.article의 특정 하위 항목에 대한 클릭 기능을 추가하려고합니다.이 기능은 요청에서받은 pageid에 특정 wikipedia 링크베이스를 표시합니다. 그러나 모든 .article은 같은 페이지를 가리 킵니다.jQuery nth-child는 첫 번째 요소 만 선택합니다

HTML :

<section id="body-article"> 
    <div id="body-container"> 

    </div> 
</section> 

자바 스크립트 (jQuery를)

function SendRequest(searchEntry){ 
    $.ajax({ 
     url: `https://en.wikipedia.org/w/api.php?action=query&list=search&format=json&srsearch=${searchEntry}`, 
     type: 'GET', 
     dataType: 'jsonp', 
     headers: {'Api-User-Agent': 'WikiReader/0.1.0'} 
     }).done(function(data, status) { 
      console.log(data); 
      GenerateArticle(data); 
     }).fail(function(data, status) { 
     console.log("ERROR! " + status); 
     }); 
} 

function GenerateArticle(data){ 
    //shows all the article in a div 
    var totalArticleLength = data.query.search.length; 
    for(var i=0;i<totalArticleLength;i++){ 
     var title= data.query.search[i].title; 
     var pageid=data.query.search[i].pageid; 
     var snippet=data.query.search[i].snippet; 
     //responsible for showing single data 
     CreateSingleArticle(title,pageid,snippet); 
     // PROBLEM IS WITH THE BELOW LINE 
     $(`.article:nth-child(${i+1})`).on("click",function(){ 
      window.open(`https://en.wikipedia.org/?curid=${pageid}`, 'Wikipedia', 'window settings'); 
     }) 
    } 

} 
function CreateSingleArticle(title,pageid,snippet){ 
    //creates a individual data 
    html = 
    `<div class="article"> 
     <div class="side-bar"></div> 
     <div class="article-container"> 
      <div class="article-header"> 
       ${title} 
      </div> 
      <div class="snippet"> 
       ${snippet} 
      </div> 
     </div> 
    </div>` 
    $("#body-container").append(html); 
} 
+0

: https://stackoverflow.com/questions/4091765/assign-click-handlers-in-for-loop –

+0

그것은 루프 내에서 범위 변수로 가능합니다 : https : //로 jsfiddle .net/amtb4t2n/ –

답변

-1

대답은 매우 간단합니다. 자바 스크립트 범위 문제가 발생했습니다. 즉각적인 함수 호출을 살펴보십시오. 자세한 내용은 여기를 참조하십시오. 더 많은 정보 확인을 위해 http://tobyho.com/2011/11/02/callbacks-in-loops/

for(var i=0;i<totalArticleLength;i++){ 
(function(index, pageId){ 

     var title= data.query.search[index].title; 
     var pageid=data.query.search[index].pageid; 
     var snippet=data.query.search[index].snippet; 
     //responsible for showing single data 
     CreateSingleArticle(title,pageid,snippet); 
     // PROBLEM IS WITH THE BELOW LINE 
     $(`.article:nth-child(${index+1})`).on("click",function(){ 
      window.open(`https://en.wikipedia.org/?curid=${pageId}`, 'Wikipedia', 'window settings'); 
     }) 
})(i, data.query.search[i].pageid) 
    } 
+0

감사합니다. 나는 바보 같은 실수를 범했다. –

+1

@SadikshyaLuintel : 이것은 JS의 전날을위한 해결책이다. 템플릿 리터럴을 사용하고 있기 때문에 클로저에서'var i = 0; '대신'let i = 0;'과 같은 다른 새로운 기능을 사용할 수도 있습니다. –

+0

모든 downvoters에게. 이 게시물에 투표를 거절 한 이유를 남겨주세요. 이것은 내 자신을 향상시키는 데 도움이됩니다. – Fachher