2011-01-17 3 views
2

안녕하세요, 나는 자바 스크립트를 가르치려고합니다. 다음은 내 첫 번째 스크립트이므로 "신인"실수가 있다면 나와 함께 감내하십시오. :)첫 번째 스크립트가 작동합니다! - IE와 Safari를 제외한 - 도와주세요

FF와 Chrome에서는 작동하지만 IE 나 Safari에서는 작동하지 않습니다.

JSLint는 for 루프를 처리하지 않습니다.

IE 디버거는 라인 (# 37)에 나에게 잘못된 인수 오류를주고있다 : 나는 barWidth 변수가 숫자가 있음을 확인했습니다

document.getElementById(progBarId).style.width = barWidth + 'px'; 

.

IE 구문에 Google 인터넷 문제가있어 비어 있습니다.

도움을 주시면 대단히 감사하겠습니다. 감사.

window.onload = upDtProgBars; 

function upDtProgBars() { 
    var allTags = document.getElementsByTagName("div"); 

    for (var i = 0; i < allTags.length; i++) { 
     if (allTags[i].className.indexOf("progBar") > -1) { 
      progBarId = setProgBarWidth(allTags[i].id); 
     } 
     // END if 
    } 
    // END for loop 
    function setProgBarWidth(progBarId) { 
     var today = new Date(); 
     var startDate; 
     var numWeeks; 
     var barWidth = 0; 
     var progBarID = ""; 
     switch (progBarId) { 
     case "html": 
      startDate = new Date('5,1,2009') 
      break; 
     case "html5": 
      startDate = new Date() 
      break; 
     case "js": 
      startDate = new Date('1, 1, 2011') 
      break; 
     case "csharp": 
      startDate = new Date('9,3, 2010') 
      break; 
     default: 
     } 
     // END Switch 
     if (progBarId != "") { 
      numWeeks = getNumWeeks(today, startDate); 
      barWidth = parseInt(numWeeks * 2.76); 
      document.getElementById(progBarId).style.width = barWidth + 'px'; 
     } 
     // END if not empty string 
    } 
    // END setProgBarWidth 
    function getNumWeeks(d1, d2) { 
     var ONE_WEEK = 1000 * 60 * 60 * 24 * 7; 
     var diffInWeeks = Math.round(Math.abs(d2.getTime() - d1.getTime()))/ONE_WEEK; 
     return diffInWeeks; 
    } 
    // END getNumWeeks 
} 
// END upDtProgBars 
+0

'alert (barWidth)'를 추가하면 어떻게됩니까? – SLaks

+2

왜'progBarID'와'progBarId' 둘 다 가지고 있습니까? –

+0

감사합니다 nikc, 나는 그것을 알아 차리지 못했습니다. – elobdell

답변

4

IE와 Safari의 날짜가 올바르게 설정되지 않았습니다. 이것은 간접적으로 다음 예제 프로세스로 인해 너비를 설정 한 행에 잘못된 인수를 발생시킵니다.

var date = new Date("garbage"); // Invalid date 
var time = date.getTime();  // returns NaN from an invalid date 
var barWidth = time * 2.76;  // Still NaN 

// The following line results in "NaNpx" for the width, which throws an error 
document.getElementById(progBarId).style.width = barWidth + 'px'; 

new Date(year, month, date). 예 :

case "csharp": 
     startDate = new Date(2010, 8, 3); 

개월이 경우 0로 시작 기억, 그래서 8 9 월이 아니라 8 월입니다. 또한 줄 끝 부분에 세미콜론을 잊지 마십시오.

+0

나는 새롭기 때문에 고맙다고 표를 던질 수는 없지만 그게 다야! 정말 고맙습니다. 그리고 참고 자료를 가르쳐 주셔서 감사합니다. – elobdell

+1

당신은 upvote 수 없습니다,하지만 몇 분 정도 기다릴 경우, 당신은 ** 허용 대답 **로 표시 할 수 있습니다. – nyuszika7h

-3

시도가 DOM 조작에 대한 JQuery와를 사용하는 것이 훨씬 쉽고 방지 일부 실수입니다.

+0

이것은 DOM 조작과는 아무 관련이 없습니다. –

+2

Stackoverflow는 "jQuery 만 사용하면됩니다." – Pointy

+3

라이브러리를 사용하는 것은 어떻게 작동하는지 이해하는 대신 사용할 수 없습니다. 또한, 아주 작은 작업을위한 라이브러리를 포함하여 바보입니다. –

0

나는 자바 스크립트 전문가가 아니에요 및 오류 원인을 모르겠습니다. 하지만 setProgBarWidth()에 ID가 아니라 객체 자체를 전달해야합니다. 왜 코드에서 동일한 항목을 두 번 이상 조회합니까? 그러면 ID와 관련된 문제도 배제됩니다.

관련 문제