2010-09-28 87 views
3

我正在運行下面的JavaScript來在我的網站橫幅上放置水平滾動文本。它在一臺服務器上運行,但不在另一臺服我得到以下錯誤:JavaScript「空或不是對象」錯誤

Error: 'this.mqo' is null or not an object

的JavaScript:

function start() { 
    new mq('m1'); 
/* new mq('m2'); 
    */ 
    mqRotate(mqr); // must come last 
} 
window.onload = start; 

// Continuous Text Marquee 
// permission to use this Javascript on your web page is granted 
// provided that all of the code below in this script (including these 
// comments) is used without any alteration 

function objWidth(obj) { 
    if (obj.offsetWidth) return obj.offsetWidth; 
    if (obj.clip) return obj.clip.width; 
    return 0; 
} 
var mqr = []; 

function mq(id) { 
    this.mqo = document.getElementById(id); 
    var wid = objWidth(this.mqo.getElementsByTagName('span')[0]) + 5; 
    var fulwid = objWidth(this.mqo); 
    var txt = this.mqo.getElementsByTagName('span')[0].innerHTML; 
    this.mqo.innerHTML = ''; 
    var heit = this.mqo.style.height; 
    this.mqo.onmouseout = function() { 
     mqRotate(mqr); 
    }; 
    this.mqo.onmouseover = function() { 
     clearTimeout(mqr[0].TO); 
    }; 
    this.mqo.ary = []; 
    var maxw = Math.ceil(fulwid/wid) + 1; 
    for (var i = 0; i < maxw; i++) { 
     this.mqo.ary[i] = document.createElement('div'); 
     this.mqo.ary[i].innerHTML = txt; 
     this.mqo.ary[i].style.position = 'absolute'; 
     this.mqo.ary[i].style.left = (wid * i) + 'px'; 
     this.mqo.ary[i].style.width = wid + 'px'; 
     this.mqo.ary[i].style.height = heit; 
     this.mqo.appendChild(this.mqo.ary[i]); 
    } 
    mqr.push(this.mqo); 
} 
function mqRotate(mqr) { 
    if (!mqr) return; 
    for (var j = mqr.length - 1; j > -1; j--) { 
     maxa = mqr[j].ary.length; 
     for (var i = 0; i < maxa; i++) { 
      var x = mqr[j].ary[i].style; 
      x.left = (parseInt(x.left, 10) - 1) + 'px'; 
     } 
     var y = mqr[j].ary[0].style; 
     if (parseInt(y.left, 10) + parseInt(y.width, 10) < 0) { 
      var z = mqr[j].ary.shift(); 
      z.style.left = (parseInt(z.style.left) + parseInt(z.style.width) * maxa) + 'px'; 
      mqr[j].ary.push(z); 
     } 
    } 
    mqr[0].TO = setTimeout('mqRotate(mqr)', 10); 
} 
+0

請不要發佈縮小的代碼,這是一個惡夢閱讀。我用http://jsbeautifier.org來清理你的文章。 – 2010-09-28 08:26:04

+0

好的,謝謝你的提示。 – GM2 2010-09-28 08:50:50

回答

4

的原因是最有可能的,有id爲 「M1」 沒有元素。第一放置此線在start功能診斷本:

alert(document.getElementById('m1')); 

如果顯示「本發明的課題」(或類似),該元件存在,並且它的一些其他問題,但如果它顯示「未定義」,則意味着頁面中沒有這樣的元素。

+0

爲什麼它會在一臺服務器上運行,而不是在另一臺服務器上運行? – GM2 2010-09-28 08:42:18

+0

@ GM2:您的HTML標記可能在每臺服務器上有所不同嗎? – 2010-09-28 08:52:07

+0

@ GM2:因爲服務器上有某些東西會導致HTML代碼中的某些內容有所不同。客戶端腳本與服務器無關,所以在瀏覽器中運行的頁面中必須顯而易見。 – Guffa 2010-09-28 08:53:14

相關問題