Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/468.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
一些JavaScript代码没有';行不通_Javascript - Fatal编程技术网

一些JavaScript代码没有';行不通

一些JavaScript代码没有';行不通,javascript,Javascript,我有一个HTML select,一旦更改就会触发函数run() 我正在做一个打字测试,我希望用户选择他选择的段落。问题是,在这个函数结束后,其余的类型测试代码不会启动。输入框中的段落发生了变化,但键入测试代码的其余部分不起作用。如何使其余的代码工作?剩下的代码在这里 var textArr = text.split(" "); var usertext = ""; var lastWord = "" var usertextArr = new Array(); var mistakes = ne

我有一个HTML select,一旦更改就会触发函数run()

我正在做一个打字测试,我希望用户选择他选择的段落。问题是,在这个函数结束后,其余的类型测试代码不会启动。输入框中的段落发生了变化,但键入测试代码的其余部分不起作用。如何使其余的代码工作?剩下的代码在这里

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")