JavaScript-未捕获引用错误:未定义checkAnswer,函数不在范围内? 类对扩展屏幕{ 构造函数(){ 超级(); var pair1=null; var-nPair1; var解; var-rightCounter=0; var licao,nS; } 配对屏幕(屏幕、课程、NSCLEEN){ var body=document.body var nodes=xmlDoc.getElementsByTagName(“对”); this.licao=教训; this.nS=nScreen; this.solution=screen.getElementsByTagName(“解决方案”)[0].textContent.split(“”); body.innerHTML=''; Startup.h1(body,“Babel”(“+languageName+”); Startup.hr(body); var d=DynamicHTML.div(主体,“边框:3px纯黑色;显示:表格;填充:20px;左边距:40px”); Startup.h1(d,“配对”); var p1=Startup.p(d,“左填充:40px;字间距:50px;”); 启动文本(p1,16,“”; Startup.text(p1,32,“”); var p2=Startup.p(d,“左填充:20px;”); var按钮; var i; var f=函数(i){ Startup.eventHandler2() } var original=screen.getElementsByTagName(“original”)[0].textContent; var按钮=原始的.split(“”); 对于(i=0;i
这是我为一个JavaScript项目写的,但当我运行它时,它会说uncaughtreferenceerror:checkAnswer没有定义,如果有人知道这个问题,我将非常感激。谢谢大家!JavaScript-未捕获引用错误:未定义checkAnswer,函数不在范围内? 类对扩展屏幕{ 构造函数(){ 超级(); var pair1=null; var-nPair1; var解; var-rightCounter=0; var licao,nS; } 配对屏幕(屏幕、课程、NSCLEEN){ var body=document.body var nodes=xmlDoc.getElementsByTagName(“对”); this.licao=教训; this.nS=nScreen; this.solution=screen.getElementsByTagName(“解决方案”)[0].textContent.split(“”); body.innerHTML=''; Startup.h1(body,“Babel”(“+languageName+”); Startup.hr(body); var d=DynamicHTML.div(主体,“边框:3px纯黑色;显示:表格;填充:20px;左边距:40px”); Startup.h1(d,“配对”); var p1=Startup.p(d,“左填充:40px;字间距:50px;”); 启动文本(p1,16,“”; Startup.text(p1,32,“”); var p2=Startup.p(d,“左填充:20px;”); var按钮; var i; var f=函数(i){ Startup.eventHandler2() } var original=screen.getElementsByTagName(“original”)[0].textContent; var按钮=原始的.split(“”); 对于(i=0;i,javascript,html,scope,Javascript,Html,Scope,这是我为一个JavaScript项目写的,但当我运行它时,它会说uncaughtreferenceerror:checkAnswer没有定义,如果有人知道这个问题,我将非常感激。谢谢大家! 另外,我不知道checkAnswer函数是否有错误或注释,因为我无法测试它,我会在我可以运行它时进行测试:)首先,您需要在该函数结束时绑定此: class Pairs extends Screen { constructor() { super(); var pair1 = null;
另外,我不知道checkAnswer函数是否有错误或注释,因为我无法测试它,我会在我可以运行它时进行测试:)首先,您需要在该函数结束时绑定此:
class Pairs extends Screen {
constructor() {
super();
var pair1 = null;
var nPair1;
var solution;
var rightCounter = 0;
var licao, nS;
}
pairScreen(screen, lesson, nScreen) {
var body = document.body
var nodes = xmlDoc.getElementsByTagName("PAIRS");
this.licao = lesson;
this.nS = nScreen;
this.solution = screen.getElementsByTagName("SOLUTION")[0].textContent.split(" ");
body.innerHTML = '';
Startup.h1(body, "Babel (" + languageName + ")");
Startup.hr(body);
var d = DynamicHTML.div(body, "border:3px solid black; display:table; padding:20px; margin-left:40px");
Startup.h1(d, "Match the pairs");
var p1 = Startup.p(d, "padding-left:40px; word-spacing:50px;");
Startup.text(p1, 16, " ");
Startup.text(p1, 32, " ");
var p2 = Startup.p(d, "padding-left:20px;");
var button;
var i;
var f = function(i) {
Startup.eventHandler2()
}
var original = screen.getElementsByTagName("ORIGINAL")[0].textContent;
var buttons = original.split(" ");
for (i = 0; i < buttons.length; i++) {
button = DynamicHTML.inpuButton(p1, i, buttons[i], "orangered");
Startup.eventHandler2(document.getElementById(i), "onclick", function() {
checkAnswer(buttons[i], i)
});
}
Startup.hr(body);
}
checkAnswer(pair, nPair) {
var index;
if (pair1 = null) {
pair1 = pair;
nPair1 = nPair;
} else {
for (index = 0; index < solution.length; index++) {
if (pair1 == solution[index]) {
if (index % 2 == 0 && solution[index - 1] == pair) {
DynamicHTML.play("general/right_answer.mp3");
rightCounter = rightCounter + 2;
document.getElementById(nPair).disabled = true;
document.getElementById(nPair1).disabled = true;
pair1 = null;
nPair1 = null;
} else if (solution[index + 1] == pair) {
DynamicHTML.play("general/right_answer.mp3");
rightCounter = rightCounter + 2;
document.getElementById(nPair).disabled = true;
document.getElementById(nPair1).disabled = true;
pair1 = null;
nPair1 = null;
} else {
DynamicHTML.play("general/wrong_answer.mp3");
pair1 = null;
nPair1 = null;
}
}
}
}
if (rightCounter == solution.length) {
if (xmlDoc.getElementsByTagName("LESSON")[licao].childNodes[nS + 2] != null) {
var fs = new Screen();
fs.functionScreen(licao, nS + 2);
} else fs.initialScreen();
}
}
}
基本上,这告诉匿名函数“嘿,我想这个引用这个外部类,而不是函数本身”
(已编辑)您需要在构造函数中绑定checkAnswer
,如下所示:
Startup.eventHandler2(document.getElementById(i), "onclick", function() {
this.checkAnswer(buttons[i], i)
}.bind(this));
或者使用and arrow函数,该函数提供对该
检查答案的精确引用,如下所示:
class Pairs extends Screen {
constructor() {
super();
var pair1 = null;
var nPair1;
var solution;
var rightCounter = 0;
var licao, nS;
this.checkAnswer = this.checkAnswer.bind(this);
}
这样,您就可以调用This。在pairScreen
函数的作用域内,或者在您想调用该函数的任何地方,如@Davelunny point中,选中Answer
,您到底从哪里得到此错误?是在课堂内还是课堂外?我在checkAnswer(按钮[i],i]上假设,但我不愿意假设
checkAnswer = (pair, nPair) => {
//your code goes here ...
}