Javascript函数返回为未定义

Javascript函数返回为未定义,javascript,jquery,html,Javascript,Jquery,Html,尝试创建一个简单的石头剪刀布游戏。但是,当我单击submitmyCalcWinner()时获取控制台错误“未定义函数” 我肯定我错过了一些简单的东西,任何建议都将不胜感激 石头剪刀 单击按钮以拾取石头、布或剪刀 做出你的选择? $(文档).ready(函数(){ var myChoice=“”; var compChoice=“”; var-myScore=0; var compScore=0; 函数calcWinner(){ myChoice=document.getElementBy

尝试创建一个简单的石头剪刀布游戏。但是,当我单击
submit
my
CalcWinner()时获取控制台错误“未定义函数”

我肯定我错过了一些简单的东西,任何建议都将不胜感激


石头剪刀
单击按钮以拾取石头、布或剪刀

做出你的选择?

$(文档).ready(函数(){ var myChoice=“”; var compChoice=“”; var-myScore=0; var compScore=0; 函数calcWinner(){ myChoice=document.getElementById(“选择器”); compChoice=Math.random(); 如果(compChoice<0.33){ compChoice=“rock”; }否则如果(compChoice<0.67){ compChoice=“纸张”; }否则{ compChoice=“剪刀”; } if(compChoice==myChoice){ document.getElementById(“demo”).innerHTML=“这是一个平局!您选择了“+myChoice+”而计算机选择了“+compChoice”; }否则如果(compChoice==“rock”){ 如果(myChoice==“剪刀”){ compScore++; document.getElementById(“demo”).innerHTML=“你输了!你选择了“+myChoice+”而电脑选择了“+compChoice”; }else if(myChoice==“纸张”){ userScore++; document.getElementById(“demo”).innerHTML=“您赢了!您选择了“+myChoice+”,计算机选择了“+compChoice”; }else if(myChoice==“纸张”){ } }否则如果(compChoice==“纸张”){ 如果(myChoice==“摇滚乐”){ compScore++; document.getElementById(“demo”).innerHTML=“你输了!你选择了“+myChoice+”而电脑选择了“+compChoice”; }else if(myChoice==“纸张”){ }else if(myChoice==“剪刀”){ userScore++; document.getElementById(“demo”).innerHTML=“您赢了!您选择了“+myChoice+”,计算机选择了“+compChoice”; }else if(myChoice==“纸张”){ } }否则如果(compChoice==“剪刀”){ 如果(myChoice==“摇滚乐”){ userScore++; document.getElementById(“demo”).innerHTML=“您赢了!您选择了“+myChoice+”,计算机选择了“+compChoice+”,您拥有”+userScore; }else if(myChoice==“纸张”){ }else if(myChoice==“纸张”){ compScore++; document.getElementById(“demo”).innerHTML=“你输了!你选择了“+myChoice+”而电脑选择了“+compChoice”; }else if(myChoice==“纸张”){ } } }; });
问题在于
calcWinner
是在闭包范围内创建的,因此无法从全局范围访问它

因为您使用的是jQuery而不是内联事件处理程序,所以使用jQuery在dom就绪处理程序中注册click处理程序,如下所示

您还需要读取输入字段的值,以便
myChoice=document.getElementById(“picker”).value
myChoice=$(“#选取器”).val()

$(文档).ready(函数(){
var myChoice=“”;
var compChoice=“”;
var-myScore=0;
var compScore=0;
$(“#选择”)。单击(calcWinner);
函数calcWinner(){
myChoice=document.getElementById(“picker”).value;
compChoice=Math.random();
如果(compChoice<0.33){
compChoice=“rock”;
}否则如果(compChoice<0.67){
compChoice=“纸张”;
}否则{
compChoice=“剪刀”;
}
$(“#demo”).html(“”);
if(compChoice==myChoice){
$(“#demo”).html(“这是一个平局!你选择了“+myChoice+”,电脑选择了“+compChoice”);
}否则如果(compChoice==“rock”){
如果(myChoice==“剪刀”){
compScore++;
$(“#demo”).html(“你输了!你选了“+myChoice+”,电脑选了“+compChoice”);
}else if(myChoice==“纸张”){
userScore++;
$(“#demo”).html(“你赢了!你选择了“+myChoice+”,电脑选择了“+compChoice”);
}else if(myChoice==“paper”){
}否则如果(compChoice==“纸张”){
如果(myChoice==“摇滚乐”){
compScore++;
$(“#demo”).html(“你输了!你选了“+myChoice+”,电脑选了“+compChoice”);
}else if(myChoice==“纸”){}else if(myChoice==“剪刀”){
userScore++;
$(“#demo”).html(“你赢了!你选择了“+myChoice+”,电脑选择了“+compChoice”);
}else if(myChoice==“paper”){
}否则如果(compChoice==“剪刀”){
如果(myChoice==“摇滚乐”){
userScore++;
$(“#demo”).html(“你赢了!你选择了“+myChoice+”,电脑选择了“+compChoice+”你有“+userScore”);
}else if(myChoice==“纸张”){}else if(myChoice==“纸张”){
compScore++;
$(“#demo”).html(“你输了!你选了“+myChoice+”,电脑选了“+compChoice”);
}else if(myChoice==“paper”){
}
};
});

单击按钮以拾取石头、布或剪刀

做出你的选择?


您的cal winner函数位于jQuery闭包函数中。窗口对象无法访问它。您可以将其移动到ready函数之外,也可以使用jQuery('button')。在('click',calcwinner')

您应该将calcWinner移动到全局。因为它在ready函数中是私有的。窗口无法访问它。

不要将
calcWinner
方法包装在就绪函数中。将
calcWinner
移出
ready
,它将是私有的,不能从外部访问