2011-06-20 35 views
0

朋友,我有相當一些成功,但在通過一個未定義的錯誤取代:Javascript替換未定義的錯誤顯示!

這裏是我的新代碼:

var avidno = '(800)123 1234'; 
var bodytext = document.body.innerHTML; 
function validate() { 
var regex = /^\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$/gi; 

if (regex.test(avidno)) { 
    alert('bingo'); 
    var altrstr = '<span>'+avidno+'</span>'; 
    //var newaltr = bodytext.replace(avidno, altrstr); 
    //var str_count = bodytext.match(avidno).length; //4 matched 

    document.body.innerHTML = newaltr; 
    alert(avidno.length); 
    find_count = avidno.length; 
    for(var i=0;i<find_count;i++) 
    { 
     var newaltr = bodytext.replace(avidno, altrstr); 
    } 

    // Valid international phone number 
} else { 
    alert('uupss'); 
    // Invalid international phone number 
} 
} 
validate(); 
+1

這可能意味着'bodytext'(因此'document.body.innerHTML')是未定義的。確保您在加載文檔時運行代碼。提供確切的錯誤信息也不會是錯誤的... –

回答

0

未定義的錯誤是由這一行造成的:

document.body.innerHTML = newaltr; 

newaltr尚未定義,但您嘗試使用它設置body的innerHTML。還有其他問題需要解決。例如下面這行:

var newaltr = bodytext.replace(avidno, altrstr); 

每次你經過循環,你都覆蓋了以前的newaltr值。如果你想追加(我不確定),那麼正確的語法是:

newaltr += bodytext.replace(avidno, altrstr); 

編輯

正如在我的崗位和其他人提到的,你有你的邏輯的幾個問題。除了邏輯問題之外,我認爲你的方法是不正確的。看看下面的問題(實際上,答案被標記爲答案),它應該讓你指出正確的方向。

https://stackoverflow.com/questions/1444409/in-javascript-how-can-i-replace-text-in...

+0

我根據你的觀點改變了我的代碼,但是現在未定義的錯誤已經結束了,但是它又一次取代了一次: –

+0

你可能還想編輯'= +到'+ ='(誠實的錯字,我期望) – Zecc

+0

@Zecc,謝謝你的高舉。固定。 –

2

您正在使用varaible newaltr創建它。

代碼的另一個問題是,你正在循環中進行替換,但是你在一個變量上執行替換,並將結果存儲在另一個變量中。您將始終對原件進行更換,因此只使用最後的替換件。

您正在使用avidno中字符串的長度來確定要做多少替換,這似乎不合邏輯。