2013-04-17 4 views
0

URL의 해시를 가져와 목록의 href 목록과 비교하려고합니다. 다음 문제는 중첩 된 함수는 인덱스 값 (그 확실히 설정중인를) 반환되지 않는 것입니다 내 코드중첩 된 각 함수에서 값을 반환하십시오.

   //ON PAGE LOAD 
       var hash = document.URL.substr(document.URL.indexOf('#')+1); 
      hash = '#' + hash; 
      if(hash) 
      { 
       $("#tab ul li a").each(function(index) { 
        if(hash==$(this).attr('href')) 
        { 
        alert(index); 
        return index; 
        } 
       }); 
      } 
      alert(index); 
      //DO STUFF WITH INDEX 

의 관련 부분이다. 첫 번째 경고는 숫자를 반환하지만 두 번째 경고는 정의되지 않은 상태로 반환됩니다.

일치하는 값의 인덱스를 반환하는 방법은 무엇입니까?

+0

어디로 돌아 오시겠습니까? 포함 함수에서 반환되면 "INDEX WITH INDEX"코드를 건너 뜁니다. – Barmar

+0

jquery의'each()'가 어떻게 작동하는지에 대한 부분입니다. http://stackoverflow.com/questions/1900172/jquery-each-method-does-not-return-value – smerny

답변

2

당신은 당신의 each의 중간에 물건을 반환 할 수 없습니다. 루프를 깨기 위해 기껏해야 false을 반환 할 수 있습니다. 자리 표시 자 변수를 사용하여 원하는 값을 저장 한 다음 루프를 중단하십시오.

  var returnValue; 
      $("#tab ul li a").each(function(index) { 
       if(hash==$(this).attr('href')) 
       { 
       alert(index); 
       returnValue = index; 
       return false; // breaks the each 
       } 
      }); 

당신이 ...each(function(...

당신은 each 내에서 호출되는 함수를 만들 수 있습니다. 따라서 반환 값을 반환하면 리턴 값은 each 코드 안의 어딘가에서 읽혀질 것입니다.이 코드는 실행을 계속하고 다른 것을 반환합니다 (일반적으로 체인 가능성을 허용하는 다른 jQuery 객체). each은 실제로 원하는 경우 무언가를 반환 할 것으로 기대합니다. 그리고 그것은 예를 들어 false입니다. 따라서 노드 목록을 반복하여 반복합니다.

1

루프 앞에 정의 된 변수에 저장 한 다음 false을 반환하여 루프를 중지해야합니다.

예 (each의 반환 값은 루프가 초기에 중단 여부를 결정하는 데 사용됩니다) :

var returned; 
$("#tab ul li a").each(function(index) { 
    if(hash==$(this).attr('href')) { 
     returned = index; 
     return false; 
    } 
}); 
// returned contains the value, or undefined 
관련 문제