找不到我的javascript函数
javascript初学者 我得到以下错误,但看不出代码有什么问题。我在以前的研讨会上也做过类似的工作,他们还好吗?我在workshop12.js中有“required”函数,希望使用它检查输入是否为空。我从w3schools获取代码 js html找不到我的javascript函数,javascript,html,Javascript,Html,javascript初学者 我得到以下错误,但看不出代码有什么问题。我在以前的研讨会上也做过类似的工作,他们还好吗?我在workshop12.js中有“required”函数,希望使用它检查输入是否为空。我从w3schools获取代码 js html 登录表格 名称 您的函数仅在ready函数的范围内,在该范围外不可用 您的元素正在全局范围内寻找该函数。将功能移到ready功能之外,如下所示: $( document ).ready(function() { ... whateve
登录表格
名称
您的函数仅在ready
函数的范围内,在该范围外不可用
您的元素正在全局范围内寻找该函数。将功能移到ready
功能之外,如下所示:
$( document ).ready(function() {
... whatever
});
// Check that input is not empty
function required() {
var x = document.forms["loginForm"]["inputName"].value;
document.write (x);
if(x = " ") {
alert("Please input a value");
return false;
}
else {
alert("Correct");
return true;
}
}
您的函数仅在ready
函数的范围内,在该范围外不可用
您的元素正在全局范围内寻找该函数。将功能移到ready
功能之外,如下所示:
$( document ).ready(function() {
... whatever
});
// Check that input is not empty
function required() {
var x = document.forms["loginForm"]["inputName"].value;
document.write (x);
if(x = " ") {
alert("Please input a value");
return false;
}
else {
alert("Correct");
return true;
}
}
你有一个范围问题
Javascript中有不同类型的作用域
全局作用域:在每个函数中都可以访问作用域为全局的变量/函数。通常情况下,您不希望对任何全局范围进行定义,因为在每个人都使用不同框架的情况下,您永远不知道是谁将变量写入全局范围
全局范围的示例:
window.bla = "I am global scoped";
var globalVar = "I am also global scoped";
function accessGlobal(){
console.log (globalVar)
}
现在还有一个函数作用域:函数中声明的变量是局部作用域,不能从外部访问(如果您更像Java的人,请将其视为私有变量)
由于使用了jQuery的onReady函数,因此您所需的函数无法全局访问
见此:
$( document ).ready(function() {
你看到函数了吗?因此,您所需的函数是函数作用域
在您的情况下,我建议采用模块模式,以防止污染全球范围
试试这个:
var myModule = {};
myModule.required = function(){
var x = document.forms["loginForm"]["inputName"].value;
document.write (x);
if(x.length === 0) {
alert("Please input a value");
return false;
}
else {
alert("Correct");
return true;
}
}
在HTML代码中,使用myModule.required()替换required()
顺便说一句,在你需要的功能中,你又犯了一个错误。您试图检查变量是否为空,如下所示:
if (x = " ")
在Javascript中,您需要使用==或更好的==检查变量。(我已在您的代码中更改了此选项)
==和===之间的区别只是===还检查正确的类型
例如
你有一个范围问题
Javascript中有不同类型的作用域
全局作用域:在每个函数中都可以访问作用域为全局的变量/函数。通常情况下,您不希望对任何全局范围进行定义,因为在每个人都使用不同框架的情况下,您永远不知道是谁将变量写入全局范围
全局范围的示例:
window.bla = "I am global scoped";
var globalVar = "I am also global scoped";
function accessGlobal(){
console.log (globalVar)
}
现在还有一个函数作用域:函数中声明的变量是局部作用域,不能从外部访问(如果您更像Java的人,请将其视为私有变量)
由于使用了jQuery的onReady函数,因此您所需的函数无法全局访问
见此:
$( document ).ready(function() {
你看到函数了吗?因此,您所需的函数是函数作用域
在您的情况下,我建议采用模块模式,以防止污染全球范围
试试这个:
var myModule = {};
myModule.required = function(){
var x = document.forms["loginForm"]["inputName"].value;
document.write (x);
if(x.length === 0) {
alert("Please input a value");
return false;
}
else {
alert("Correct");
return true;
}
}
在HTML代码中,使用myModule.required()替换required()
顺便说一句,在你需要的功能中,你又犯了一个错误。您试图检查变量是否为空,如下所示:
if (x = " ")
在Javascript中,您需要使用==或更好的==检查变量。(我已在您的代码中更改了此选项)
==和===之间的区别只是===还检查正确的类型
例如
看起来您也在使用jQuery。您还记得包括它吗?您将它隐藏在ready函数的作用域内。@j08691 yes包含jquery-if(x==“”)//使用双等式oops我确实有双等式看起来您也在使用jquery。您是否还记得将其包括在内?您正在将其隐藏在ready函数的作用域内。@j08691 yes已包括jquery-if(x==“”)//使用双相等对象我确实有双相等对象。我还注意到,全局作用域上可能已经存在名为required
的对象。在chrome中调用未定义的引用时,它会记录required()VM244:2未捕获引用错误:required未定义
,在firefox中required()引用错误:required未定义
@Daniel A White&Jamiec。我已经按照建议移动了它,但仍然保持不变error@Austin. 干杯我改了名字,这就解决了问题。谢谢大家的帮助。非常感谢有一个错误!如果(x=“”)将永远不起作用。请参阅我的回答。我还注意到,全局作用域中可能已经存在名为required
的内容。在chrome中调用未定义的引用时,它会记录required()VM244:2未捕获引用错误:required未定义
,在firefox中required()引用错误:required未定义
@Daniel A White&Jamiec。我已经按照建议移动了它,但仍然保持不变error@Austin. 干杯我改了名字,这就解决了问题。谢谢大家的帮助。非常感谢有一个错误!如果(x=“”)将永远不起作用。看到我的答案了吗