2013-07-15 3 views
1

여기에 a jsfiddle이 있습니다.jQuery 모바일 루프가 작동하지 않습니다.

두 경우 모두 "도마뱀"을 클릭하면 show a picture of a lizard이됩니다.

"+ entries[index] +"을 각각 1과 6으로 바꿀 때 모든 것이 정상적으로 작동합니다. 루프를 사용하면 더 이상 작동하지 않습니다.

나는 이유를 모른다.

+2

즉각적인 수정 : http://jsfiddle.net/7KnZd/1/. 이벤트 핸들러가 실행될 때 ('click' 이벤트가 발생했을 때), 루프가 완료되었습니다. 즉,'index'는 루프의 마지막 항목을 참조하므로 핸들러 내부의 entries [index] 당신이 기대하는 것을 지칭하지 않습니다. 내 예제는 핸들러 내부의'index'에 대한 모든 참조가 루프의 특정 지점이되도록 새로운 범위 (handleItem을 호출)를 작성하여'index'의 값을 캡쳐합니다. – Ian

+0

@Ian Thanks! 나는 그걸 알아내는 데 시간을 보냈을 텐데. – MacBryce

답변

1

이벤트에서 entries[i]에 응답이 표시됩니다. 값 i 2 (배열의 길이와 동일) 될 경우 때문에

$("#"+ entries[1] +"-choice-C").bind("click", function() { 
    $("#"+ entries[1] +"-lizard").show(); 
}); 

을 클릭 entries[i]의 값은, 정의되지 않은 것이다. 당신이 필요로하는 무엇

i의 가치를 유지하는 closure이며, 여기에 예입니다 : 문제를 soves 코드에 대한

var items = ["a","b", "c"]; 
var displayItem = function (i) { 
    window.setTimeout(function() { 
     alert(items[i]); 
    }, 100); 
} 

for (var i = 0; i < items.length; i++) { 
    displayItem(i); 
} 

, @Ian는 댓글을 달았 feedle에 도착.

관련 문제