Javascript string.slice()只工作一次
这已经让我发疯好几个小时了,我肯定我错过了一些简单的东西,也许不是 我正在使用Javascript将我的个人主页变成一个类似控制台的应用程序。您可以在这里查看:www.fort-hub.com 我正在映射按键笔划并使用backspace(keycode 8)更改控制台输入Javascript string.slice()只工作一次,javascript,slice,Javascript,Slice,这已经让我发疯好几个小时了,我肯定我错过了一些简单的东西,也许不是 我正在使用Javascript将我的个人主页变成一个类似控制台的应用程序。您可以在这里查看:www.fort-hub.com 我正在映射按键笔划并使用backspace(keycode 8)更改控制台输入div的innerHTML属性,称为#in,通过slice()减少一个结束字符,如下所示: HTML: 福丘 欢迎来到福特中心控制台 46&&key
div
的innerHTML
属性,称为#in
,通过slice()
减少一个结束字符,如下所示:
HTML:
福丘
欢迎来到福特中心控制台
46&&key<90 | | inArray(allowedChars,key)==true)
{
keyChar=String.fromCharCode(键);
var input=trim(consoleIn.innerHTML);
/*地图退格*/
如果(键===8)
{
consoleIn.innerHTML=input.slice(0,-1);
}
...
consoleIn.innerHTML+=keyChar.toLowerCase();
}
...
}
所以,请通过转到URL,输入一些内容并按backspace来测试这一点。一个字符将被删除,但重复退格不会删除字符串的其余字符。删除最后一个字符后,您将向元素追加实际的退格字符代码(
0x08
)。浏览器不会渲染它,但下次尝试再次删除最后一个字符时,实际上会删除该退格字符,并立即添加新的退格字符
您不应该将已处理的控制字符追加到元素的
innerHTML
中。在删除最后一个字符后,您正在将实际的退格字符代码(0x08
)追加到元素中。浏览器不会渲染它,但下次尝试再次删除最后一个字符时,实际上会删除该退格字符,并立即添加新的退格字符
您不应该将已处理的控制字符附加到元素的
innerHTML
如果按下的键是backspace,则从输入中删除最后一个字符(并将innerHTML设置为保持),但仍然将键字符添加到innerHTML
。这将附加\x08
(根据字体和浏览器的不同,不会显示,Stackoverflow不接受作为输入)
在consoleIn.innerHTML=input.slice(0,-1)之后添加一个return
语句
中止按键处理程序。如果按下的键是退格键,则从输入中删除最后一个字符(并将innerHTML设置为保留),但仍将按键字符添加到innerHTML
。这将附加\x08
(根据字体和浏览器的不同,不会显示,Stackoverflow不接受作为输入)
在consoleIn.innerHTML=input.slice(0,-1)之后添加一个return
语句
中止按键处理程序。我查看站点时遇到SSL连接错误。你能打个电话吗?很抱歉。要不要再试一次?我删除了过时的.htaccess,它指的是我不再使用的SSL。我在查看站点时遇到了SSL连接错误。你能打个电话吗?很抱歉。要不要再试一次?我删除了过时的.htaccess,它指的是我不再使用的SSL。
<!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>
/* 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();
}
...
}