2012-01-04 3 views
2

누군가가 이러한 요소 중 하나에 링크하기 전에 열 레이아웃과 관련된 질문이 아닙니다.jQuery를 사용하여 두 요소를 최대 크기로 조정

동일한 높이가되고 싶은 페이지의 여러 영역에 두 개의 텍스트 상자가 있습니다. 그것들은 jQuery와 비동기 적으로 렌더링됩니다. 다음과 같이 데이터를로드합니다.

$.ajax({ 
    url: someUrl, 
    dataType: 'html', 
    type: 'GET', 
    success: function(data) { 
    $(mySelector).html(data) 
    }, 
    complete: function() { 
    adjustHeights() 
    } 
}) 

adjustHeights가 호출됩니다 (참고 자료는 내용이 잘려도 유효 함). 선택기는 적절한 요소도 반환합니다. 선택기와 일치하는 모든 항목의 높이를 얻은 다음 현재 항목의 최대 높이를 적용합니다 (예 : 높이가 38px이고 높이가 50px이므로 모두 50px를 반환합니다).

문제는 콘텐츠가로드 된 후 (예 : 버튼 클릭 또는 디버거를 사용하여) 여기에서 실행될 때 adjustHeights가 완벽하게 정상적으로 작동하지만 모든 것이 렌더링되기 전에 높이가 올라간다는 것입니다. 나는 커스텀 폰트 페이스가 부분을 연주하고 있을지도 모른다고 생각하지만 확실하지 않다.

jQuery에게 "진지하게 말하지 말고, 모든 것이 실제로 렌더링 될 때까지 실행하지 마십시오."라고 알리는 좋은 방법이 있습니까? 나의 이해는 이것이 이미 일어나야 만하지만 그렇지 않다는 것이다.

편집 CSS에있는 글꼴 또는 라인 높이를 제거하면이 문제가 해결됩니다.

+0

''당신은 가능하면 도움이 될 것입니다 몇 가지 라이브 코드를 보는 작은 타임 아웃'' –

+0

를 사용할 수 있습니다. Height를 얻기 위해 ['HTMLElement.offsetHeight'] (https://developer.mozilla.org/en/DOM/element.offsetHeight)를 사용하고, .height()는 테두리를 제외한 내용 높이를 얻고 심. 그래도 작동하지 않는다면 @AndrewWhitaker가 가장 좋은 해결책이 될 수 있습니다. 글꼴이 렌더링 될 때 어떤 이벤트가 발생한다고 생각하지 않습니다. –

+1

[http://jsfiddle.net/](http://jsfiddle.net/) – Tomas

답변

1

시간 초과를 사용할 수 있습니다. 종종 DOM에 내용을 삽입 할 때 DOM이 완전히 업데이트되기 전에 연속적인 js가 실행됩니다. 이것은 DOM에서 내용을 대체 한 후 애니메이션을 바로 수행 할 때 가장 분명합니다.이 애니메이션은 육안으로 나타날 수 있으며 최종 상태로 곧바로 이동할 수 있습니다. 귀하의 경우에는 치수가 필요하기 전에 업데이트되지 않은 것 같습니다. A -이 약 (해키 앤드류가 오른쪽) 방법은 다음과 같습니다

setTimeout(adjustHeights, 0); 
+0

이것은 [이 스레드] (http://stackoverflow.com/questions/779379/why-does-settimeoutfn-0-sometimes-help)에서 그리고 더 중대하게 논의된다. 자세한 내용은 John Resig [여기] (http : // ejohn. – baseten

+0

실제로 나는 setTimeout (adjustHeights, 50) 또는 그 라인을 따라 뭔가 최상의 결과를보고 있습니다. 링크는 매우 편리하지만 미래의 올바른 방향으로 사람들을 안내해야합니다. 감사합니다! – Jared

0

다음을 시도한 적이 있습니까?

complete: function() { 
    $(document).ready(function() { 
     adjustHeights(); 
    }); 
} 

또한 '완료'정의 이후에는 쉼표가 없습니다.

희망이 도움이됩니다.

+0

쉼표에 대한 좋은 지적은 바뀔 것입니다. 실제 코드는 coffeescript에 있었고 다른 일부 작업을 수행 했으므로 이것은 일반 JS 로의 신속한 (그리고 분명히 엉성한) 변경이었습니다. 나는 그것을 시도하고 그것은 작동하지 않았다 : ( – Jared

관련 문제