2013-12-08 86 views
0

我已经编写了一个类似于cmd控制台的打字效果的代码。代码本身工作正常,但它没有工作后我放置的任何代码。我一直试图弄清楚一段时间,而且我很困难。此代码后Javascript停止工作

这是一个JSFiddle的问题。 http://jsfiddle.net/GWj4b/

/** 
* CONSOLE 
*/ 

setInterval(cursorBlink, 500); 
function cursorBlink() { 
    if($('#cursor').css('visibility') == 'hidden'){ 
     $('#cursor').css({'visibility': 'visible'}); 
    } else { 
     $('#cursor').css({'visibility': 'hidden'}); 
    } 
} 

var text = $('#type').html(); 
var text = text.replace(/<br>/g, '_'); 

$('#type').html(''); 

$.each(text.split(''), function(i, letter) { 
    setTimeout(function(){ 
     if(letter == '_'){ 
      $('#type').html($('#type').html() + '<br />'); 
     } else { 
      $('#type').html($('#type').html() + letter); 
     } 
    }, 100 * i); 
}); 
+1

哪种调试方法到目前为止您尝试过? – helle

+0

了解[JavaScript错误控制台](http://www.netmagazine.com/tutorials/javascript-debugging-beginners)是如何工作的。 – JJJ

+0

首先:用于调试使用'console。log()' - 当然有一个控制台打开 - 而不是'alert()'。有时候你想要代码执行停止的效果,但在大多数情况下,它更像是一种障碍而不是一种好处,因为你可以通过断点来更好地实现这一点。此外,控制台格式复杂的数据(对象,数组)更好。 –

回答

1

登录你看:当你调用替换它Uncaught TypeError: Cannot call method 'replace' of undefined

文本没有定义的,因为你正在寻找不存在的元素。

您可以测试,看它是否存在这样的

if(text) { 
    text.replace(/<br>/g, '_'); 
} 

的Javascript如果它击中一个运行时错误像这样将停止执行。

请考虑进一步了解如何使用Chrome的dev tools或浏览器中的相应内容来调试此类问题。一旦你看到错误,它很清楚哪一行导致了这个问题。

顺便提一句,在添加您尝试引用的元素后,代码将执行完毕。如果它们可能不存在,则需要执行代码检查,并且不管它是否是一个好习惯。

http://jsfiddle.net/GWj4b/1/

+0

感谢你和其他已经回来的人。 #type元素只存在于一个页面上,而脚本正在所有页面上运行。现在我将把这些代码移到它自己的文件中,只在一个页面上调用它。谢谢。 – JazzyP

1

您是不是正在使用HTML?

$('#type')回报undefined,然后你做text.replace(/<br>/g, '_');

你不能做undefined.replace,所以它失败,并且停止执行。

尝试添加HTML代码也JS代码

,你必须添加了jQuery的小提琴,在框架&扩展部分。

如果您在控制台中去看一看这个小提琴http://jsfiddle.net/9748L/

1

我刚刚调试它,它看起来像文本是不确定的, 所以也许你还没有创建HTML中的元素。

var text = text.replace(/<br>/g, '_'); 
0

你的确缺少了一些HTML代码,并试图操纵文本undefined。 您可以添加下列HTML代码,

<span id="type">is this what you try to do????</span><span id="cursor">_</span> 

实现你的目标的效应。

http://jsfiddle.net/JKp5z/