2012-10-21 55 views
1

这让我生气了好几个小时,我敢肯定我错过了简单的东西,或者可能不是。Javascript string.slice()只能用一次

我正在使用Javascript将我的个人主页变成控制台,如应用程序。你可以在这里查看:www.fort-hub.com

我映射击键,并有退格(键码8)变更叫#in控制台输入divinnerHTML财产通过slice()少了一个结束字符像这样:

HTML:

<!doctype html> 

<html lang='en-gb'> 

<head> 

<meta charset="UTF-8"> 
<title>FortHUB</title> 
<link href="ss.css" rel="stylesheet" type="text/css"> 
<meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0;"> 

</head> 

<body> 

<div id="console"> 
    <div id="out"><h1>Welcome to fort-hub console</h1></div> 

    <div id="in"> 
     <span id="text"></span><span id="cursor"><</span> 
    </div> 
</div> 

<script src="fH.js"></script> 

</body> 

</html> 

的Javascript:

/* Globals */ 
var _NL_ = '>'; 
var consoleIn = document.getElementById('text'); 
var consoleOut = document.getElementById('out'); 

/* Func in question */ 
function keyPress(event) 
{ 
    event.preventDefault(); 
    event.stopPropagation(); 

    var e = event || window.event; 
    var key = e.which || e.keyCode; 
    var keyChar; 

    var allowedChars = new Array(); 
    allowedChars[0] = 8; /* backspace */ 
    allowedChars[1] = 13; /* return */ 
    allowedChars[2] = 32; /* space */ 

    /* Alphanumeric range only */ 
    if(key > 46 && key < 90 || inArray(allowedChars, key) === true) 
    { 
     keyChar = String.fromCharCode(key); 
     var input = trim(consoleIn.innerHTML); 
     /* Map backspace */ 
     if(key === 8) 
     { 
       consoleIn.innerHTML = input.slice(0, -1); 
     } 
     ... 
     consoleIn.innerHTML += keyChar.toLowerCase(); 
    } 
    ... 
} 

所以,请通过转到URL来测试,输入内容并按下退格键。一个字符将被删除,但重复的退格将不会删除字符串的其余字符。

+0

我在浏览网站时遇到SSL连接错误。你可以制作JSfiddle吗? –

+0

对不起。小心再试一次?我删除了过时的.htaccess,并提到SSL我不再使用。 – Lee

回答

4

如果按下的键是退格键,您将删除input中的最后一个字符(并将innerHTML设置为remain),但您仍然将keyChar添加到innerHTML。这附加\x08(根据字体和浏览器不显示,不被Stackoverflow输入接受)。

consoleIn.innerHTML = input.slice(0, -1);之后立即添加return声明以中止按键处理程序。

+0

非常好。谢谢。 – Lee

4

在删除最后一个字符后,您将要添加的实际退格字符代码(0x08)添加到您的元素中。它不会被浏览器渲染,但下次您再次尝试删除最后一个字符时,实际上会删除该退格字符,并立即添加新的退格字符。

您不应该将您处理的控制字符附加到元素的innerHTML

+0

感谢您的回答! – Lee