一些JavaScript代码没有';行不通
我有一个HTML select,一旦更改就会触发函数run() 我正在做一个打字测试,我希望用户选择他选择的段落。问题是,在这个函数结束后,其余的类型测试代码不会启动。输入框中的段落发生了变化,但键入测试代码的其余部分不起作用。如何使其余的代码工作?剩下的代码在这里一些JavaScript代码没有';行不通,javascript,Javascript,我有一个HTML select,一旦更改就会触发函数run() 我正在做一个打字测试,我希望用户选择他选择的段落。问题是,在这个函数结束后,其余的类型测试代码不会启动。输入框中的段落发生了变化,但键入测试代码的其余部分不起作用。如何使其余的代码工作?剩下的代码在这里 var textArr = text.split(" "); var usertext = ""; var lastWord = "" var usertextArr = new Array(); var mistakes = ne
var textArr = text.split(" ");
var usertext = "";
var lastWord = ""
var usertextArr = new Array();
var mistakes = new Array();
var highlightArgs = new Array();
var score = 0;
var count = 0;
var highlightIndex = 0;
//Prevent pasting into user text box
$('textarea').bind("cut paste", function (e) {
e.preventDefault();
});
//Keep highlighted text responsive
$(window).on('resize', function(){
$(".highlightTextarea").css('width','100%');
$(".highlightTextarea-container").css('width','99%');
if (highlightArgs.length > 0){
updateHighlight();
}
});
//Jump to next word to be typed
function textJump(jumpIndex){
var textStr = text.substring(0, jumpIndex);
storyTextarea.value = textStr;
storyTextarea.scrollTop = storyTextarea.scrollHeight;
storyTextarea.value = text;
}
//Jump to specified line of TextArea
//OLD METHOD DO NOT USE
function textareaJump(line){
storyTextarea = document.getElementById("storytext");
var lht = (storyTextarea.clientHeight / storyTextarea.rows)*0.875;
var jump = (line - 1) * lht;
storyTextarea.scrollTop = jump;
}
//Refresh the highlighted area
function updateHighlight(){
$('#storytext').highlightTextarea('destroy');
$('#storytext').highlightTextarea({ ranges: highlightArgs });
}
function typeTest(){
function updateUsertext(){
usertext = $('textarea#usertext').val();
var usertextLatestArr = usertext.split(" ");
usertextArr.push(usertextLatestArr[usertextLatestArr.length-1]);
count = usertextArr.length - 1;
var wordLen = textArr[count].length;
var charBufferIndex = textArr[count].length < 3 ? 5 : 2;
//Word spelling matches
if(textArr[count] === usertextArr[count]){
if (mistakes[mistakes.length-1] === count){ mistakes.pop() }
score++;
highlightArgs.push({ color: '#c1f5b0', start: highlightIndex, length: wordLen })
highlightIndex += (wordLen + 1);
}
//Missed one word
//any more than a single consecutive missed word counts as an error
else if(textArr[count+1] === usertextArr[count]){
usertextArr.splice(count, 0, "blank");
if (mistakes[mistakes.length-1] === count){ mistakes.pop() }
score++;
mistakes.push(count);
highlightArgs.push({ color: '#febbb9', start: highlightIndex, length: wordLen })
highlightIndex += (wordLen + 1);
highlightArgs.push({ color: '#c1f5b0', start: highlightIndex, length: textArr[count+1].length })
highlightIndex += (textArr[count+1].length + 1);
}
//Spelling mistake
else{
highlightArgs.push({ color: '#febbb9', start: highlightIndex, length: wordLen })
highlightIndex += (wordLen + 1);
mistakes.push(count);
}
//Rebuild the highlight object
updateHighlight();
//Jump to the next word
var jumpIndex = highlightIndex + (wordLen + 1) + charBufferIndex;
textJump(jumpIndex);
};
//User presses backspace
$('#usertext').on('keydown', function(e) {
var lastChar = $('textarea#usertext').val().slice(-1);
var secondLastChar = $('textarea#usertext').val().slice(-2).substring(0, 1);;
if(e.keyCode == 8 && lastChar === " " && secondLastChar !== " "){
usertextArr.pop();
mistakes.pop();
highlightArgs.pop();
updateHighlight();
highlightIndex -= ( textArr[count].length + 1 );
count--;
}
});
$('#usertext').on('keydown', function(e) {
var lastChar = $('textarea#usertext').val().slice(-1);
var spaceTest = lastChar === " " ? true : false;
if(e.keyCode == 32 && spaceTest == false){
updateUsertext();
}
});
}
var textArr=text.split(“”);
var usertext=“”;
var lastWord=“”
var usertextArr=新数组();
var errors=新数组();
var highlightArgs=新数组();
var得分=0;
var计数=0;
var highlightIndex=0;
//防止粘贴到用户文本框中
$('textarea').bind(“剪切粘贴”,函数(e){
e、 预防默认值();
});
//保持突出显示的文本响应
$(窗口).on('resize',function()){
$(“.highlightTextarea”).css('width','100%);
$(“.highlighttextareacontainer”).css('width','99%);
如果(highlightArgs.length>0){
updateHighlight();
}
});
//跳转到要键入的下一个单词
函数textJump(jumpIndex){
var textStr=text.substring(0,jumpIndex);
storyTextarea.value=textStr;
storyTextarea.scrollTop=storyTextarea.scrollHeight;
storyTextarea.value=文本;
}
//跳转到TextArea的指定行
//旧方法不使用
函数文本区域跳转(行){
storyTextarea=document.getElementById(“storytext”);
var lht=(storyTextarea.clientHeight/storyTextarea.rows)*0.875;
var跳跃=(第1行)*lht;
storyTextarea.scrollTop=跳转;
}
//刷新突出显示的区域
函数updateHighlight(){
$(“#故事文本”).highlightTextarea('destroy');
$('#storytext').highlightTextarea({ranges:highlightArgs});
}
函数类型测试(){
函数updateUsertext(){
usertext=$('textarea#usertext').val();
var usertextLatestArr=usertext.split(“”);
usertextArr.push(usertextLatestArr[usertextLatestArr.length-1]);
count=usertextArr.length-1;
var-wordLen=textArr[count]。长度;
var charBufferIndex=textArr[count]。长度<3?5:2;
//单词拼写匹配
if(textArr[count]==usertextArr[count]){
if(errors[errors.length-1]==count){errors.pop()}
分数++;
highlightArgs.push({color:'#c1f5b0',start:highlightIndex,length:wordLen})
highlightIndex+=(wordLen+1);
}
//漏掉一个字
//任何超过一个连续漏掉的单词都视为错误
否则如果(textArr[count+1]==usertextArr[count]){
usertextArr.splice(计数,0,“空白”);
if(errors[errors.length-1]==count){errors.pop()}
分数++;
错误。推(数);
highlightArgs.push({color:'#febbb9',start:highlightIndex,length:wordLen})
highlightIndex+=(wordLen+1);
highlightArgs.push({color:'#c1f5b0',start:highlightIndex,length:textArr[count+1].length})
highlightIndex+=(textArr[count+1]。长度+1);
}
//拼写错误
否则{
highlightArgs.push({color:'#febbb9',start:highlightIndex,length:wordLen})
highlightIndex+=(wordLen+1);
错误。推(数);
}
//重建高亮显示对象
updateHighlight();
//跳转到下一个单词
var jumpIndex=highlightIndex+(wordLen+1)+charBufferIndex;
textJump(jumpIndex);
};
//用户按backspace键
$('#usertext')。在('keydown',函数(e)上{
var lastChar=$('textarea#usertext').val().slice(-1);
var secondLastChar=$('textarea#usertext').val().slice(-2).substring(0,1);;
如果(e.keyCode==8&&lastChar==“”&&secondLastChar!==“”){
usertextArr.pop();
错误;
highlightArgs.pop();
updateHighlight();
highlightIndex-=(textArr[count]。长度+1);
计数--;
}
});
$('#usertext')。在('keydown',函数(e)上{
var lastChar=$('textarea#usertext').val().slice(-1);
var spaceTest=lastChar==“”?真:假;
if(e.keyCode==32&&spaceTest==false){
updateUsertext();
}
});
}
如何使所有的代码工作和打字测试功能顺利进行。以下是HTML:
<select id="select-para" onchange="run();">
<option value="paragraph 1...">Para 1</option>
<option value="paragraph 2...">Para 2</option>
<option value="paragraph 3...">Para 3</option>
<option value="paragraph 4....">Para 4</option>
</select>
<div class="typebox">
<textarea id="storytext" name="storytext" class="form-control" type="text" readonly="readonly" rows="3"></textarea>
</div>
<div class="typebox">
<textarea id="usertext" name="usertext" type="text" class="form-control" rows="2" placeholder="Start typing here to begin the test..."></textarea>
</div>
<div class="timer">You have <span id="time" class="timerTime">02:00</span> minutes left.</div>
第1款
第2段
第3段
第4段
你还有02:00分钟。
在更改段落时添加typeTest()
<select id="select-para" onchange="run(); typeTest();">
在run()函数中,以便注册处理程序
从中删除“textarea”,因为不需要它来标识ID
$("textarea#usertext")
逻辑可能需要正确格式化,以便对除“8”bs和“32”空格之外的所有其他键码正常工作。从何处调用typeTest()方法?您是否声明在调用run()方法后该方法正在工作,但正在发生?你的控制台有错误吗?这是一个“请帮我解决所有问题”,因此太宽泛了。你能缩小范围吗?先生,如果我用javascript提供一个段落,代码可以正常工作,但是在添加下拉列表后,段落在文本框中更改,但计时器没有启动。创建另一个函数typetest()来触发其余代码也不能使其正常工作。请帮帮我,我被困了两天。计时器不是从你的代码为我启动的。我想每次你修改段落时都需要开始。如果您正在定义typeTest()函数,那么它将不会被触发,除非您从HTML调用它。所以删除typeTest()函数,以便jQuery调用从脚本中自动注册。
<select id="select-para" onchange="run(); typeTest();">
$("#usertext").bind("cut paste", function (e) {
e.preventDefault();
});
//Keep highlighted text responsive
$(window).on('resize', function(){
$(".highlightTextarea").css('width','100%');
$(".highlightTextarea-container").css('width','99%');
if (highlightArgs.length > 0){
updateHighlight();
}
});
$("textarea#usertext")