2010-01-21 2 views
1

IE6은 항상 저에게 놀라움을 금치 못합니다.하지만 이건 정말 이상합니다.IE6에 비해 jQuery가 너무 빠릅니까? (이상한 문제는 경고를 추가하여 해결됩니까?)

각 '버튼'에 텍스트를 세로로 가운데 놓아야하는 가로형 메뉴를 만듭니다. IE를 제외한 모든 브라우저에서 쉽습니다. 따라서 IE 브라우저의 경우 자바 스크립트를 사용하여 각 단추에 필요한 패딩을 추가하여 텍스트가 가운데에 표시되도록하십시오.

IE8과 IE7에서 정상적으로 작동합니다. IE6은 웬일인지 제대로하지 못했습니다. IE6가 하나씩 제대로 각 요소에 올바른 패딩을 적용, 거기 경고와

$menuTriggerUL.children('li').each(function(i){ 
     var heightDifference = tallestTab-tabTextHeight[i]; 
     if (heightDifference < 0){heightDifference=0}; 
     alert(heightDifference); 
     $(this).children('a:first').css("padding-top", Math.floor(heightDifference/2)); 
    }); 

:

그래서, 나는 패딩을 추가 라인 전에 ALERT 권리를 추가했다.

경보를 울리면, 첫 번째 경보가 울리거나 뒤집어 지지만 뒤따른 경보는 걸립니다.

jQuery는 IE6에서 처리하는 것보다 빠르게 진행되는 것처럼 보입니다. 분명히 그 일은 일어날 가능성이 없지만 어떻게 설명해야할지 모르겠습니다.

문제의 일부인 것 : jQuery each() 함수를 사용하고 이전의 채워진 배열에서 값을 가져 오는 중입니다.

어떤 일이 벌어 질지에 대한 이론은 무엇입니까?

업데이트 : 아래의 jhurshman의 대답이 해결책이었습니다. 나는이 문제에 대해 더 많이 알고 싶다. 그리고 사람들이 어떤 시나리오로 IE6에서이 문제를 일으킬 수 있는지에 대한 아이디어를 갖고 싶다. 나는 결코 그것에 뛰어 들어 본 적이 없지만 나중에 사용하기 위해 도구 상자에 수정 사항을 가지고있어 기쁩니다.

+3

이 모든 것이 $ (document) .ready 처리기 안에 있습니까? – eliah

+0

@eliah : 예 –

답변

2

IE (6 특히, 때로는 7)로 작업 할 때, DOM이 어떤 식 으로든 조작 된 직후 준비가되지 않은 경우가 꽤 자주 있습니다. 매우 자주, 이러한 문제는 같은 것을 수행하여 문제가있는 코드를 연기에서 확인할 수 있습니다

setTimeout(troublesomeCode, 0); 

나는 또한 이상 반복하려고 할 것이다 (troublesomeCode가 문제가있는 작업을 수행하는 함수에 대한 참조입니다) 역순으로 노드를 만들고 차이가 있는지 확인하십시오.

+0

우와 ... 그게 ... weird! 귀하의 솔루션은 그것을 완전히 고쳤습니다. 따라서 특정 문제를 더 자세히 설명하는 참조/링크는 무엇입니까? 이것이 jQuery가 내부적으로 처리해야하는 것으로 보입니다. 특정 시나리오가 다른 시나리오보다 문제가 될 때 있습니까? –

+0

정확하게 이슈가 무엇이고 왜이 접근이 도움이되는지에 대한 설명을 본 적이 없다고 말할 수는 없습니다. 경고가 추가 될 때 거의 사라지는 모든 문제는이를 "해결할"수 있습니다. 그것은 내 회사에서 JS 개발자들 사이에서 잘 알려져 있으므로 실제로 농담입니다. "setTimeout-zero를 시도 했습니까?" 가장 좋은 추측은 IE가 DOM 트리와 관련된 일부 데이터 구조를 비 스레드 안전 방식으로 유지한다는 것입니다. setTimeout-zero를 사용하면 현재 JS 스레드가 IE를 발생시키는 무언가를 시도하기 전에 끝낼 수 있습니다 그 데이터 구조에 액세스 할 필요가 있습니다. 모든 도움/정보를 주셔서 감사합니다 – jhurshman

+0

나는 2010 년에 * 내가 IE를 p * 할 수있는 새로운 방법을 발견했음을 놀랍습니다! –

0

if 문에는 닫는 중괄호가 없습니다.

+0

if (heightDifference <0) {heightDifference = 0}; –

+0

1 분 전입니까? 아니면 내 눈이 나를 속였습니까? – corymathews

+0

@jhurshman 나는 원래 게시물을 편집하지 않았지만 다른 종류의 영혼을 편집했을 수 있습니까? 나는 오타를 만드는 것으로 유명합니다. –

관련 문제