Javascript 无法验证这个!验证过程不断停止

Javascript 无法验证这个!验证过程不断停止,javascript,validation,Javascript,Validation,我在验证这段javascript代码时遇到问题。JSlint在第一个指令之后一直停下来,我似乎不明白为什么。似乎验证器选择的是警告,而不是错误,例如使用空格代替制表符,或者预期+=1代替++,这些对我来说都很好。另外,我不确定它是否做了它应该做的,但在我完成验证之前,我无法检查它 var prompt = document.getElementById("prompt"); var response = document.getElementById("response"); var warni

我在验证这段javascript代码时遇到问题。JSlint在第一个指令之后一直停下来,我似乎不明白为什么。似乎验证器选择的是警告,而不是错误,例如使用空格代替制表符,或者预期+=1代替++,这些对我来说都很好。另外,我不确定它是否做了它应该做的,但在我完成验证之前,我无法检查它

var prompt = document.getElementById("prompt");
var response = document.getElementById("response");
var warning = document.getElementById("warning");
var fixation = 'fixPlus.jpg';
var cueImage = ['fixPlus.jpg', 'midCue.jpg', 'bothCue.jpg', 'topCue.jpg', 'botCue.jpg'];
//images for stimuli were taken from wheedesign.com
var stImage = ['T_L_N.jpg', 'T_L_C.jpg', 'T_L_I.jpg', 'T_R_N.jpg', 'T_R_C.jpg', 'T_R_I.jpg', 'B_L_N.jpg', 'B_L_C.jpg', 'B_L_I.jpg', 'B_R_N.jpg', 'B_R_C.jpg', 'B_R_I.jpg'];
var condIdx[1];
var i;
for (i = 2, i <= 47; i++) {
    condIdx.push(i);
}
var cueType = ['0', '1', '2']; //I will use a repetitive instruction instead of writing 000,111, etc 
for (i = 0; i < 11; i++) {
    cuetype[i] = 0;
}
for (i = 12; i < 23; i++) {
    cueType[i] = 1;
}
for (i = 24; i < 35; i++) {
    cueType[i] = 2;
}
for (i = 36; i < 41; i++) {
    cueType[i] = 3;
}
for (i = 42; i < 47; i++) {
    cueType[i] = 4;
}

var stType = ['0', '1', '2', '3', '4', '5', '6', '7'];
var ansKey = ['Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'M', 'M', 'M', 'M', 'M', 'M'];
var promptTxt = 'Press Z for left and M for right';
var invalidTxt = ' -- Invalid key press!!!';
var correctTxt = 'correct answer!';
var incorrectTxt = 'incorrect answer!'
var waitTxt = 'Wait for the prompt!';
var tooSlow = 'Too slow!';
var toa = 400; //trial onset asynchrony in ms
var preCueFixTime[500, 600, 700, 800, 900, 1000, 1100, 1200]; //pre-cue fixation
var cueTime = 100; // cue in ms
var postCueTime = 400; //post-cue fixation
var maxStTime = 1500; //stimulus display (until a key is pressed or 1500ms has lapsed)
var promptTime = 1500; // duration of response prompt in ms
var nTrial = isPractice ? 1 : 24;
var trialCounter = 0; //to keep track of progress
var remainStr = ''; //remaining trials
var doneStr = ''; //trials completed
var indxChar = '='; //character used to indicate a trial
var remainColor = 'LightBlue'; //color to display remainStr
var doneColor = 'Navy';
var progTxt = 'Progress: '.fontcolor(doneColor);
var rspArr = []; //to store responses
var cssFile = '<link rel = "stylesheet" type = "text/css" href = "rngStyle.css">';
var blocks = 0;

function block_initiation() {
    if (blocks < 7) {
        warning.innerHTML = '';
        response.innerHTML = '';
        object.onclick = "trialBlock()" + 'Click here to begin a block of trials!';
        blocks++;
        updateProgress();
    } else {
        submitData();
    }
}

function trialBlock() {
    "use strict";
    condIdx = shuffle(condIdx);
    preCueFixTime = shuffle(preCueFixTime);
    cueImage = shuffle(cueImage);

    for (i = 0; i < 6; i++) {
        var theTask = setInterval(function () {
            aTrial();
        }, toa);
    }
}

function aTrial() {
    "use strict";
    if (trialCounter < nTrial) {
        warning.innerHTML = '';
        response.innerHTML = '';
        getKeypress();
        trialCounter++;
        updateProgress();
    } else {
        submitData();
    }
}

function getKeypress() {
    "use strict";
    rspArr.push(0);
    // fixation - cue - fixation - stimulus - key press/too slow
    var interval = window.setInterval(function () {
        if (fixation.display == 'hidden') {
            fixation.style.visibility = 'visible';
        } else {
            fixation.style.visibility = 'hidden';
        }
    }, preCueFixTime[trialCounter]); //display initial fixation
    if (cueImage[trialCounter].display == 'hidden') {
        cueImage[trialCounter].style.visibility = 'visible';
    } else {
        cueImage[trialCounter].style.visibility = 'hidden';
    }
}, 100); //shows cue display for 100ms

prompt.innerHTML = promptTxt; //show the prompt text
setTimeout(function () {
    prompt.innerHTML = '';
}, promptTime);

if (stImage[condIdx[trialCounter]].display == 'hidden') {
    stImage[condIdx[trialCounter].style.visibility = 'visible';
    } else {
        stImage[condIdx[trialCounter]].style.visibility = 'hidden';
    }
}, 1500);

setTimeout(function () {
    tooSlow.innerHTML = '';
}, tooSlow);
var inputRecorded = false;
document.onkeydown = function (e) {
    if (inputRecorded) {
        warning.innerHTML = waitTxt;
        cueImage[trialCounter].style.visibility = 'hidden';
        return false; //to cancel the event
    }
    e = e || window.event;
    var key_press = String.fromCharCode(e.keyCode);
    var regex = /[MZ]/;
    condIdx[trialCounter].innerHTML = '';
    //stImage[indeces 1 to 6] should be Z and stImage[7-12] should be M
    var stStart = new Date();
    fixation + cueImage[trialCounter] + fixation + stImage[condIdx[trialCounter]];
    setTimeout(function () {
        fixation.innerHTML = '';
    }, preCueFixTime[trialCounter]); //this will still show preCueFixTime in ascending order
    if (key_press.search(regex) > -1) {
        var stEnd = new Date();
        var RT = stEnd.getTime() - stStart.getTime();
        //something was pressed
        if (condIdx[trialCount] < 7 && key_press == 'Z'
        OR condIdx[trialCount] >= 7 && key_press == 'M') {
            //correct!
            var correct = true;
            trialCond = [cond Idx, cueType, correct, RT];
            rspArr[trialCount] = trialCond.join();
            response.innerHTML = key_press;
            clearInterval(tooSlow); // cancel Too Slow
            clearInterval(stImage[trialCounter]); //cancel stimulus display
            warning.innerHTML = correctTxt;
        } else {
            //incorrect!
            var correct = false;
            rspArr[rspArr.length - 1] = key_press;
            response.innerHTML = key_press;
            clearInterval(tooSlow); // cancel Too Slow
            clearInterval(stImage[trialCounter]); //cancel stimulus display
            warning.innerHTML = incorrectTxt;
        }
    } else {
        warning.innerHTML = key_press + invalidTxt;
    }
    inputRecorded = true;
}; //document.onkeydown
}

function updateProgress() {
    "use strict";
    //alert (trialCounter +  ' ' + remainStr); 
    if (trialCounter === 0) {
        for (var i = 0; i < nTrial; i++) {
            remainStr += indxChar;
        }
    } else {
        doneStr += indxChar;
        remainStr = remainStr.slice(0, -1);
    }
    progress.innerHTML = progTxt + doneStr.fontcolor(doneColor) + remainStr.fontcolor(remainColor);
}

function checkProgress() {
    "use strict";
    var j, tot = 0,
        n = rspArr.length;

    //alert(tot + ' ' + n);
    for (j = n - 5; j < n; j++) {
        if (rspArr[j] > 0) {
            tot++;
        }
    }
    var actionAttr, fbkTxtm, valueAttr;
    if (tot > 3) {
        actionAttr = 'action="rng04Task.php"';
        fbkTxt = '<h2>Good!&emsp;That ends the practice. </h2>';
        valueAttr = 'value="Click here to formally begin the task"';
    } else {
        actionAttr = 'action="rng03Practice.php"';
        fbkTxt = '<h2>You are not quite in sync with the prompts </h2>' + '<h2> Please try again </h2>';
        valueAttr = 'value="Click here to have some more practice"';
    }
    document.write(cssFile +
        '<form class="center"' + actionAttr + '>' + fbkTxt + '<input class = "myButton" type="submit"' + valueAttr + '>' + '</form>');
    //alert(cssFile +
    //'<form class="center"' + actionAttr + '>' + fbkTxt + '<input class = "myButton" type="submit"' + valueAttr + '>' + '</form>');
}

function shuffle(arr) {
    "use strict";
    for (var j, x, i = o.length; i; j = Math.floor(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x);
    return arr;
    //function taken and adapted from http://jsfromhell.com/array/shuffle
};

function submitData() {
    "use strict";
}

我怀疑它在以下方面失败了:

var condIdx[1];

因为我不认为这是有效的js语法。您试图在同一行中声明变量名,并提供大小/或访问索引,而不使用相等语句?

是否可以包含jslint输出?您似乎有一些不匹配的大括号。