Javascript 未定义函数-未捕获引用错误

Javascript 未定义函数-未捕获引用错误,javascript,Javascript,我有这个未捕获的referenceerror函数是未定义的错误,不理解 如果我有 $(document).ready(function(){ function codeAddress() { var address = document.getElementById("formatedAddress").value; geocoder.geocode( { 'address': address}, function(results, status) { if (status ==

我有这个未捕获的referenceerror函数是未定义的错误,不理解

如果我有

$(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);
   }
  });
 }
});


当我按下按钮时,它将返回“未捕获的引用错误”

但是如果我把codeAddress()放到$(document).ready(function(){})之外,那么它就可以正常工作了


我的目的是将codeAddress()放在document.ready.function中。

问题是
codeAddress()
没有足够的范围可从按钮调用。您必须在
ready()
的回调之外声明它:


删除
onclick
属性并添加ID如何:

<input type="image" src="btn.png" alt="" id="img-clck" />

如果您需要更改函数名或任何不需要触摸html的内容,则可以使用这种方法。

您的问题在于您不理解正在设置的范围

您正在将
ready
函数传递给函数本身。在此函数中,您正在创建另一个名为
codeAddress
的函数。此函数存在于创建它的作用域中,而不存在于window对象中(在该对象中,所有东西及其叔叔都可以调用它)

例如:

var myfunction = function(){
    var myVar = 12345;
};

console.log(myVar); // 'undefined' - since it is within 
                    // the scope of the function only.
请在此查看有关匿名函数的更多信息:

另一件事是,我注意到您正在该页面上使用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()
替换为其快捷方式
$()
()。然后,该方法用于将单击处理程序分配给元素。我还将
文档.getElementById
替换为jQuery对象。

必须在ready()之外编写该函数体

因为ready用于调用函数或使用如下绑定id绑定函数

$(document).ready(function() {
    $("Some id/class name").click(function(){
        alert("i'm in");
    });
});
但如果调用“showmount”函数onchange/onclick event,则无法执行此操作

$(document).ready(function() {
    function showAmount(value){
        alert(value);
    }

});
您必须在ready()之外写入“showmount”


请检查您是否正确提供了js引用。首先是JQuery文件,然后是您的自定义文件。因为您在js方法中使用了“$”。

还有一件事。根据我的经验,发生此错误的原因是,
函数之前有另一个错误未定义-uncaughtreferenceerror


因此,查看控制台以查看是否存在以前的错误,如果存在,请更正任何存在的错误。您可能很幸运,因为它们就是问题所在。

认为我会提到这一点,因为我花了一段时间来修复此问题,并且我在任何地方都找不到答案。我正在编写的代码适用于一位同事,但不适用于我(我也犯了同样的错误)。它在Chrome中对我有效,但在Edge中无效

通过清除Edge中的缓存,我可以让它正常工作


这可能不是这个特定问题的答案,但我想我会提到它,以防它为其他人节省一点时间。

清除缓存为我解决了这个问题,或者您可以在其他浏览器中打开它

index.js index.jsp

读取器
${message}
你好

有问题的站点上丢失了许多按钮,哪个按钮附带了错误?左边的按钮有“位置或地址”谢谢Humberto,我现在对javascript有了更多的了解。谢谢你的解释。这是我问题的答案,因为我无法运行自己的函数(与jQuery无关),并且只要我将它们放在
jQuery(document).ready(function()之前{
然后一切都成功了!谢谢,Humberto!谢谢,这个答案让我理解了jquery和jsPerfect的答案。解决了我的问题,
函数未定义
哇!谢谢Jonathon,你对我这样的初学者的所有解释都很有帮助。这对我不起作用。我仍然有同样的问题,你能帮忙吗me@ifaour如果我想将参数传递给
codemaddress(),我该怎么办
函数?删除
onclick
不会一直有帮助。我正在动态创建一些元素,希望它们在单击时调用函数。我无法使用您提到的方法实现这一点。您的方法是一种替代方法,而不是问题的解决方案。如果所有其他方法因为嵌套视图,我们不得不使用文档就绪,但是可以在外部声明的内部访问。
$(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);
           }
        });
    });  
});
$(document).ready(function() {
    $("Some id/class name").click(function(){
        alert("i'm in");
    });
});
$(document).ready(function() {
    function showAmount(value){
        alert(value);
    }

});
function showAmount(value){
    alert(value);//will be called on event it is bind with
}
$(document).ready(function() {
    alert("will display on page load")
});
function myFun() {
    $('h2').html("H999999");
}
<html>
<head>
    <title>Reader</title>
</head>
<body>
<h2>${message}</h2>
<button id="hi" onclick="myFun();" type="submit">Hi</button>
</body>
</html>