2012-09-03 5 views
1

나는 반복 된 어커런스를 지원하는 캘린더에서 작업하고 있으므로 의도 한 동작은 하루에 하나의 활동에 대한 "완료"확인란을 선택하면 해당 날짜의 활동 인스턴스를 숨기고 나머지는 그대로 둡니다.클로저에서 함수의 변수를 고정하는 방법은 무엇입니까?

실제로 보이는 동작은 누군가가 체크 박스를 체크하면 해당 액티비티의 마지막 날 인스턴스를 삭제하고 함수가 클로저의 루프의 가장 최근 변수에 액세스하고 있기 때문입니다 대신에 변수가 실행될 때 그 변수가 보유한 값을 사용합니다. 관련 코드는 다음과 같습니다

for(var index = 0; index < elements.length; ++index) 
    { 
    var split_id = elements[index].id.split('_'); 
    var id = Number(split_id[1]); 
    var day = split_id[2]; 
    var date = split_id[3]; 
    var month = split_id[4]; 
    var year = split_id[5]; 
    elements[index].onclick = function() 
     { 
     alert(id + '_' + day + '_' + date + '_' + month + '_' + year); 
     if (calendar[id][2].indexOf(id + '_' + day + '_' + date + '_' + month + '_' + year) === -1) 
      { 
      calendar[id][2][calendar[id][2].length] = id + '_' + day + '_' + date + '_' + month + '_' + year; 
      } 
     save_all(); 
     update_calendar_display(); 
     } 
    } 

이 생성 된 때했던 변수, 루프가 종료되지 않은 온 클릭 기능 액세스 할 수있는 최선 옵션은 무엇입니까? u는 UR 코드에서 어떤 폐쇄을 사용하지 않은

답변

1

감사합니다. for 루프는 범위를 정의하지 않습니다. 노력이

function clickFunction(id, date, day, month, year) { 
     return function() { 
      alert(id + '_' + day + '_' + date + '_' + month + '_' + year); 
      if (calendar[id][2].indexOf(id + '_' + day + '_' + date + '_' + month + '_' + year) === -1) { 
       calendar[id][2][calendar[id][2].length] = id + '_' + day + '_' + date + '_' + month + '_' + year; 
      } 
      save_all(); 
      update_calendar_display(); 
     } 
} 

다음

elements[index].onclick = clickFunction(id, date, day, mo) 
+0

감사합니다; 현재 http://JonathansCorner.com/private-logistics/에서 작동 중입니다. – JonathanHayward

관련 문제