2011-01-20 7 views
0

새로 만든 div에서 scrollTo에 문제가 있습니다. append()를 통해 DOM에 추가됩니다. 어떤 이유로 나는 코드 내에서 원하는 곳으로 스크롤 할 수 없다. 콘솔 명령이나 버튼을 추가하고 스크롤 이벤트를 그렇게 호출하는 경우에만 작동한다.jQuery 플러그인 scrollTo는 콘솔에서만 작동합니다.

코드 :

$('#history').scrollTo('max'); 

하기 만 콘솔에서 작동 또는 버튼에 연결합니다.

편집 : 히스토리 div에 오버플로가 있습니다 : 자동, 그것이 원인인지 확실하지 않습니다.

답변

0

새 요소를 DOM에 추가 한 직후에 "scrollTo"를 호출하고 있습니까?

DOM 레이아웃의 경우 다시 계산할 가능성이 없습니다. 요소 사이의 상대 오프셋 값은 현재 스크립트 처리가 끝날 때까지 아직 업데이트되지 않습니다.

두 가지 가능한 해결 방법 :

1. setTimeout("$('#history').scrollTo('max')", 1); // Call this after you append your element. This will allow the stack to unwind and update the DOM positions 

2. $('#history').scrollTo(0, 9999); // Where "9999" is a value far larger than the actual height of the control. 
+0

내가 제안 하나를 시도 생각하지만, 재 시도는 일을했다. DOM 요소가 언제 만들어 지는지 전혀 알지 못합니다. 7에서 500 밀리 초가 걸릴 수 있습니다. 지금은 50ms 타임 아웃으로 설정되어 있지만 이것은 kludge입니다. 아쉽게도 몇 가지 사항을 다시해야합니다. – Rigil

+0

상위 요소의 "onnodeinserted"이벤트에 대한 scrollTo 호출을 연결하려고 할 수 있습니다. "appendChild"호출이 발생하거나 "실현"이 실제로 발생한 직후에 해당 이벤트가 동 기적으로 발생하는지 여부는 알 수 없습니다. 너 정말 호기심이 많아 .... – selbie

0

이것은 사용자가 함수를 호출 할 때 실제로 존재하지 않는 요소에 scrollTo()을 첨부하려고한다는 것을 나타냅니다. 콘솔에서 작동한다는 사실은이 사실을 암시합니다. 그런 경우, 한 가지 방법은 예를 들어 livequery과 같은 라이브러리 또는이 요소가 추가되면이 요소에 대해 scrollTo() 함수를 호출하면됩니다.