2011-01-17 5 views
2

ちょっとすべて、 私は自分自身をJavascriptを教えようとしています。以下は私の最初のスクリプトですので、いくつかの "ルーキー"の間違いがある場合は、私に同行してください。 :)私の最初のスクリプトが動作します! - IEとSafariを除いて - 助けてください

FFやChromeでは動作しますが、IEやSafariでは動作しません。

JSLintはforループを処理しません。

IEデバッガは行(#37)で私に無効な引数エラーを与えている:私はbarWidth変数が数値であることが確認されました

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

Googleの構文でGoogled IEの問題が発生し、空になりました。

ご協力いただきまして誠にありがとうございます。ありがとう。

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

私は、JavaScriptの専門家ではないし、エラーを引き起こしているかわからないです。しかし、setProgBarWidth()にIDだけでなく、オブジェクト自体を渡す必要があります。コードで同じ項目を複数回検索するのはなぜですか?それはまた、IDに関連する問題を排除するでしょう。

関連する問題