2010-09-28 86 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

相关问题