2009-12-01 4 views
1

이 문제가 발생했습니다 : 숫자에 따라 막 대형 차트를 만들고 싶습니다. 흥미롭게도 IE8에서 쿼크 모드를 사용하면 매우 잘 작동하지만 다른 곳에서는 실패합니다. 나는 그 실수가 어디에 있는지 정말로 말할 수 없으며 여기서 누군가가 나를 도울 수 있기를 바랍니다. 내가 jQuery를 사용하지만,에서 getElementById()와 element.style.width = someValue와를 사용하고 있습니다 (jQuery를하지 않고 예) 작동하지 않았다 중 하나 :(jquery/javascript 설정 너비가 잘못되었습니다.

[편집 :. 제거 전체 예를 링크하며 pastie이 만료]

기본적으로 :..

<input onChange="calculateField(1)" ...> 

function calculateField(fieldname){ 
    value = $("#input_" + fieldname).val(); 
    fancyMagic(); 
    value = 6 * value; // for testing 

    $("#subtotal_" + fieldname).html(value); 
    updateDiagram(); 
} 

function updateDiagram(){ 
    // gather required into, maxwidth, maxval, etc... 

    // fetch 'normal' bar 
    var target = $("#animatebar_1"); 
    var width = maxwidth * (value/maxval); 

    // set width to proper width 
    target.width(width); 

    // like for avg bar 
    var avgtarget = $("#avgbar_1"); 
    var avgwidth = maxwidth * (averagevalue/maxval); 
    avgtarget.width(avgwidth); 
} 

나는 다양한 설정과 오페라에 FF, IE8을 모두 시도하고 간단하게 작동하지 않는 바의 폭 직후 0으로 설정 IE8 모드는 흥미롭게도, 작동 쿼크

. 나는 그것이 단지 내가 바보 인 것을 꽤 확신한다. 그러나 나는 appre 할 것이다. 이것을 도와주세요. 나는 또한 .css()를 사용하여 크기를 변경하려고 시도했으나 작동하지 않았다.

미리 감사드립니다.

+0

console.log 모두 실제 수학 값 (NaN 또는 문자열과 반대)으로 계산되도록 모든 수학 방정식을 확인합니다. IE에서 홀수 수학 처리 중 일부는 약간의 차이가 있습니다 (예 : 0으로 나누기). –

+0

나는 IE dev 툴바와 방화 광 및 오페라의 잠자리를 사용하여 코드를 단계별로 실행하고 모든 변수에서 항상 정확한 값 (또는 정확한 값을 찾고 쉽게 계산할 수 있음)을 가졌다. – Cornelius

+0

덧붙여 말하면, dev 도구 및 잠자리보고 폭은 0입니다. firbug는 현재 40px입니다. 너비를 변경하기 전후에 console.log를 사용하면 item.width()에 적당한 값을 얻을 수 있습니다. 가시성이 '가시적'으로보고됩니다. (방화범에 걸렸습니다. jQuery에서 CSS를 읽는 방법을 아직 찾지 못했습니다.) – Cornelius

답변

4

문제는 span 태그를 사용하는 것일 수 있습니다. 대신 div를 사용해야합니다. 범위 태그는 너비를 무시합니다.

+1

. 나는 확실히 그것을 기대하지 않았다. 겸손에 대한 교훈, 세세한 부분에 대한 배려, 그리고 기발한 괴팍한 방식의 교훈. 정말이 문제를 해결할 수 있도록 MillsJROSS에게 감사드립니다. – Cornelius

+0

하! 천재. 좋은 하나, 나는 곤란했다. – Jimmeh

+0

나도 그렇게 바보 같았다. 3 – Cornelius

0

어디에서 maxval을 얻을 수 있습니까? null, nan 또는 0 중 하나입니다. 어느쪽으로 든 거기에 오류가 발생합니다.

+0

전체 예제처럼 : var maxval; if (value> averagevalue) {maxval = value; } else {maxval = averagevalue; } (lines 45 et seq.), 여기서 value와 averagevalue는 모두 '전역'(29 행 이후); 코드를 단계별로 실행하면 모든 것이 정의됩니다. (또한 : 그것이 왜곡 모드에서 작동하는지 설명하지 않겠습니까?) – Cornelius

0

시도 추가 target.css ('폭', 폭 + "픽셀")보다

다른, 나는 어떤 명백한 오류를 볼 수 없습니다.

+0

뒤늦은 지켜봐야하는 명백한 실수를 제외하고는 작동하지 않았습니다. – Cornelius

+0

정말 실수는 아니지만 jquery가 기본값이라고 가정합니다. 그것은 어쨌든 px로. 나는 단지 빨대에 정말로 쥐고 있었다 : p – Jimmeh

+0

그때 승선을 환영한다. ;) 그리고 당신의 도움에 감사드립니다. – Cornelius

3

실제로 솔루션은 실제로 매우 쉽습니다. IE 이외의 다른 브라우저는 상자 모델을 올바르게 따른다. 즉, 인라인 된 요소의 너비를 설정할 수 없습니다. 사용중인 막대는 SPAN 요소이며 display:inline

으로 설정되므로 SPAN 대신 DIV를 사용하거나 .animbars 및 .avgbars CSS 선언에 display:block을 추가 할 수 있습니다. 의도 한 시각적 디자인을 깨뜨릴 수 있지만 트랙에 다시 올려 놓기가 너무 어려워서는 안됩니다.

+0

스팬 너비를 무시한 뒤에 대한 동기에 대한 더 이상 설명해 주셔서 감사합니다. (내가 다른 대답을 받아 들인 이유는 처음에 그것을 보았을 때 아주 간단했다.) – Cornelius

관련 문제