var el = $('.container');
var anchors = new Array('jobs', 'portfolio', 'docs', 'interier', 'price');
for (var i = 0; i < anchors.length; i++) {
el.on('click', 'a[href$="#'+anchors[i]+'"]', function (e) {
e.preventDefault();
console.log(anchors[i]);
$.scrollTo('a[name="'+anchors[i]+'"]');
});
};
1
A
답변
3
해당 요소를 클릭하면 i
이 anchors.length
값으로 증가합니다.
클릭 핸들러에는 i
에 대한 참조가 있습니다.
JavaScript에서 확인할 수없는 속성 조회는 undefined
을 반환합니다.
요소에 대한 참조로 this
을 사용하는 것이 훨씬 쉬울 것입니다. 그렇지 않으면 i
값을 직접 참조하는 것이 아니라 값으로 전달하는 방법을 찾으십시오.
1
i
이 실제로 5
과 같기 때문에 정의되지 않은 이유가 있습니다. 이것 좀보세요 : 그 루프가 완료
for (var i = 0; i < 5; i++) {
console.log(i);
}
이제 후 그것이 for
루프 현지해야하기 때문에 i
가이 시점에서 정의되지 않은 것이라고 생각합니다. 불행하게도, 이것은 사실이 아닙니다. 이 테스트하는 간단한 방법 :
for (var i = 0; i < 5; i++) {
console.log(i);
}
console.log(i) // Logs out 5;
간단히 말하면
, for 루프의 i++
는 진실 시험의 일부 후에 i < 5
비트 실행됩니다. 따라서 i
이 4
과 같으면 루프가 실행되고 i++
이 증가하여 i
의 값을 5로 설정합니다. 그러면 진실 테스트가 실패합니다.
그래서 지금 당신이 i
을 알고 당신이 당신의 anchors
배열의 조회를 수행 할 때, anchors[5]
가 정의되지 5
같다.
때마다 클릭 이벤트가 발생, 그것은 5, 차례로, 당신은 항상
이 문제를 해결하려면, 우리가 만들 수 있습니다 정의되지 않은 기록합니다 i
의 캐시 된 값을 실행하기 때문에이 중요한 이유는 그래서
var el = $('.container');
var anchors = new Array('jobs', 'portfolio', 'docs', 'interier', 'price');
for (var i = 0; i < anchors.length; i++) {
// By passing the value to this self executing function,
// it creates a new instance of the variable
(function (index) {
el.on('click', 'a[href$="#'+anchors[index]+'"]', function (e) {
e.preventDefault();
console.log(anchors[index]);
$.scrollTo('a[name="'+anchors[index]+'"]');
});
})(i);
};
0
변수 i
같은 i
의 값으로 별칭은 마지막 루프의 값을 얻었다. 당신이 앵커에 액세스하려면이를 사용할 수 있습니다
console.log($(this).attr('href').substr(1));
관련 문제
- 1. JSONObject.length가 정의되지 않은 이유는 무엇입니까? 코드의
- 2. 코드의 결과가 정의되지 않은 이유는 무엇입니까?
- 3. console.log가 정의되지 않은 상태로 인쇄되지 않습니까?
- 4. 이 시나리오에서 test.elem이 정의되지 않은 이유는 무엇입니까?
- 5. 이 ListView에서 'SelectedIndex'가 정의되지 않은 이유는 무엇입니까?
- 6. val()이 정의되지 않은 이유는 무엇입니까?
- 7. 이 JSON 변수가 정의되지 않은 이유는 무엇입니까?
- 8. 이 스크립트에서 정의되지 않은 이유는 무엇입니까?
- 9. 이 setInterval 메서드가 정의되지 않은 이유는 무엇입니까?
- 10. 이 JavaScript 배열이 정의되지 않은 이유는 무엇입니까?
- 11. 이 jQuery 객체가 정의되지 않은 이유는 무엇입니까?
- 12. 이 컨트롤러가 정의되지 않은 이유는 무엇입니까?
- 13. 이 객체가 정의되지 않은 이유는 무엇입니까?
- 14. 이 내부 함수가 정의되지 않은 이유는 무엇입니까?
- 15. 이 함수에서 정의되지 않은 이유는 무엇입니까?
- 16. 이 코드에서 X가 정의되지 않은 이유는 무엇입니까?
- 17. 정의되지 않은 이유는 무엇입니까?
- 18. 이 정의되지 않은 참조가 오류 메시지에 지정되지 않은 이유는 무엇입니까?
- 19. JavaScript 함수가 정의되지 않은 이유는 무엇입니까
- 20. 코드의 일부가 실행되지 않은 이유는 무엇입니까? Node.js/Oriento
- 21. eval()이 자바에서 정의되지 않은 값을주는 이유는 무엇입니까?
- 22. 부울이 정의되지 않은 이유는 무엇입니까?
- 23. html2canvas가 정의되지 않은 이유는 무엇입니까?
- 24. 다음 코드의 출력에서 "정의되지 않은"것은 무엇입니까?
- 25. 변수가 정의되지 않은 이유는 무엇입니까?
- 26. 정의되지 않은 이유는 무엇입니까? ReactJs
- 27. chrome.runtime이 정의되지 않은 이유는 무엇입니까?
- 28. y가 정의되지 않은 이유는 무엇입니까?
- 29. 문자열이 정의되지 않은 이유는 무엇입니까?
- 30. 메쏘드가 정의되지 않은 이유는 무엇입니까?
을 일종의 논외 var에 앵커 = 같은 배열 초기화 [에 'a', 'b', 'c'는] [자바 스크립트 폐쇄의 빠른 – DVM
가능 중복을해야한다 내부 루프 - 간단한 실용 예제 (http://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-practical-example) –
잘못된 범위, 거기에 정의되어 있지 않습니다. –