未定义函数 - 未捕获的 ReferenceError
Posted
技术标签:
【中文标题】未定义函数 - 未捕获的 ReferenceError【英文标题】:Function is not defined - Uncaught ReferenceError 【发布时间】:2022-01-24 07:35:04 【问题描述】:我有这个“未捕获的 ReferenceError: function is not defined”错误,不明白。
如果我有
$(document).ready(function()
function codeAddress()
var address = document.getElementById("formatedAddress").value;
geocoder.geocode(
'address': address
, function(results, status)
if (status == google.maps.GeocoderStatus.OK)
map.setCenter(results[0].geometry.location);
);
);
和
<input type="image" src="btn.png" onclick="codeAddress()" />
<input type="text" name="formatedAddress" id="formatedAddress" value="" />
当我按下按钮时,它会返回“Uncaught ReferenceError”。
但是,如果我将codeAddress()
放在 $(document).ready(function())
之外,那么它会工作很好。
我的意图是将codeAddress()
放在document.ready
函数中。
【问题讨论】:
有问题的网站上的按钮丢失了,哪个有附加的错误? 左边的按钮,有“位置或地址” 【参考方案1】:有时会因为缓存和cookies以及我们在js文件上创建的函数无法被浏览器加载而发生。因此,请尝试清除缓存和 cookie 或在同一页面上按 CTRL+F5。另外,您可以尝试在隐身模式下打开它。
【讨论】:
【参考方案2】:清除缓存为我解决了这个问题,或者您可以在其他浏览器中打开它
index.js
function myFun()
$('h2').html("H999999");
index.jsp
<html>
<head>
<title>Reader</title>
</head>
<body>
<h2>$message</h2>
<button id="hi" onclick="myFun();" type="submit">Hi</button>
</body>
</html>
【讨论】:
【参考方案3】:我想我会提到这一点,因为我花了一段时间来解决这个问题,而且我在 SO 上的任何地方都找不到答案。我正在编写的代码为一位同事工作,但不适合我(我遇到了同样的错误)。它适用于 Chrome,但不适用于 Edge。
我可以通过清除 Edge 中的缓存来使其正常工作。
这可能不是这个特定问题的答案,但我想我会提到它以防它为其他人节省一点时间。
【讨论】:
【参考方案4】:还有一件事。根据我的经验,发生此错误是因为 Function is not defined - uncaught referenceerror
之前还有另一个错误。
因此,通过控制台查看是否存在先前的错误,如果存在,请更正任何存在的错误。你可能很幸运,因为他们是问题所在。
【讨论】:
【参考方案5】:请检查您是否提供了正确的 js 引用。首先是 JQuery 文件,然后是您的自定义文件。由于您在 js 方法中使用了“$”。
【讨论】:
【参考方案6】:你必须在ready()之外写那个函数体;
因为ready是用来调用函数或者绑定绑定id的函数,像这样。
$(document).ready(function()
$("Some id/class name").click(function()
alert("i'm in");
);
);
但如果你在 onchange/onclick 事件中调用“showAmount”函数,则不能这样做
$(document).ready(function()
function showAmount(value)
alert(value);
);
你必须在ready()之外写“showAmount”;
function showAmount(value)
alert(value);//will be called on event it is bind with
$(document).ready(function()
alert("will display on page load")
);
【讨论】:
【参考方案7】:您的问题是您不了解您设置的范围。
您正在向ready
函数传递一个函数本身。在此函数中,您将创建另一个名为 codeAddress
的函数。这个存在于创建它的范围内,而不是在 window 对象内(所有东西及其叔叔都可以调用它)。
例如:
var myfunction = function()
var myVar = 12345;
;
console.log(myVar); // 'undefined' - since it is within
// the scope of the function only.
在这里查看更多关于匿名函数的信息:http://www.adequatelygood.com/2010/3/javascript-Module-Pattern-In-Depth
另一件事是我注意到您在该页面上使用了 jQuery。这使得设置点击处理程序变得更加容易,您无需费心在 HTML 中设置“onclick”属性。您也不需要将codeAddress
方法提供给所有人:
$(function()
$("#imgid").click(function()
var address = $("#formatedAddress").value;
geocoder.geocode( 'address': address, function(results, status)
if (status == google.maps.GeocoderStatus.OK)
map.setCenter(results[0].geometry.location);
);
);
);
(您应该删除现有的onclick
并向您要处理的图像元素添加一个ID)
请注意,我已将 $(document).ready()
替换为它的快捷方式 $()
(http://api.jquery.com/ready/)。然后使用click 方法为元素分配一个点击处理程序。我还用 jQuery 对象替换了您的 document.getElementById
。
【讨论】:
哇!谢谢乔纳森,你对像我这样的初学者的所有解释都非常有帮助。 这对我不起作用..我仍然有同样的问题,你能帮帮我吗【参考方案8】:如何去掉onclick
属性并添加一个ID:
<input type="image" src="btn.png" id="img-clck" />
还有你的脚本:
$(document).ready(function()
function codeAddress()
var address = document.getElementById("formatedAddress").value;
geocoder.geocode( 'address': address, function(results, status)
if (status == google.maps.GeocoderStatus.OK)
map.setCenter(results[0].geometry.location);
);
$("#img-clck").click(codeAddress);
);
这种方式如果你需要改变函数名或者什么都不需要接触html。
【讨论】:
@ifaour 如果我想将参数传递给codeAddress()
函数,该怎么办?
删除onclick
不会一直有帮助。我正在动态创建一些元素,并希望它们在单击时调用一个函数。我不能用你提到的方法来实现这一点。你的是替代方案,不是问题的解决方案。
如果所有其他方法都没有在就绪部分中受到保护,这将很有帮助。由于嵌套视图,这变得有点头疼,我们必须使用准备好的文档,但可以在外部声明的内部访问。【参考方案9】:
问题是codeAddress()
没有足够的范围可以从按钮调用。你必须在ready()
的回调之外声明它:
function codeAddress()
var address = document.getElementById("formatedAddress").value;
geocoder.geocode( 'address': address, function(results, status)
if (status == google.maps.GeocoderStatus.OK)
map.setCenter(results[0].geometry.location);
);
$(document).ready(function()
// Do stuff here, including _calling_ codeAddress(), but not _defining_ it!
);
【讨论】:
感谢 Humberto,我现在对 javascript 有了更多的了解。谢谢你的解释。 这个!这是我的问题的答案,因为我无法运行自己的函数(与 jQuery 无关),并且只要我将它们放在jQuery(document).ready(function()
之前,一切正常!谢谢,温贝托!
谢谢,这个回答让我了解jquery和js
完美答案。解决了我的问题,function was undefined
以上是关于未定义函数 - 未捕获的 ReferenceError的主要内容,如果未能解决你的问题,请参考以下文章