【问题标题】:Uncaught ReferenceError: myFunction is not defined未捕获的 ReferenceError:未定义 myFunction
【发布时间】:2013-02-16 18:06:47
【问题描述】:

给出一个错误。我已将代码放在</body> 之前。仍然收到错误。

<form action="" method="get" id="searchform" >
<input name="q" type="text" id="search" size="32" maxlength="128" class="txt">
<input type="button" id="hit" value="Search" onclick="myFunction();return false" class="btn">   
</form>

JS,

<script type="text/javascript">
    var nexturl = "";
    var lastid = "";
    var param;
    $(document).ready(function () {
        function myFunction() {
            param = $('#search').val();
            alert("I am an alert box!");
            if (param != "") {
                $("#status").show();
                var u = 'https://graph.facebook.com/search/?callback=&limit=100&q=' + param;
                getResults(u);
            }
        }
        $("#more").click(function () {
            $("#status").show();
            $("#more").hide();
            pageTracker._trackPageview('/?q=/more');
            var u = nexturl;
            getResults(u);
        });
    });
</script>

【问题讨论】:

  • 去掉$(document).ready() 结构。如果您的代码位于底部,则不需要它。
  • 用jQuery而不是onclick绑定事件处理程序。

标签: javascript


【解决方案1】:

您必须将函数移到$document.ready 之外,然后您将有两个选择:第一个将其移动到&lt;head&gt; 或第二个将其移动到结束$document.ready 括号之前。为你的函数使用这种类型的声明myFunction(){alert("inside my function");};

【讨论】:

    【解决方案2】:

    您不能将myFunction 放在onclick 之后。当看到onclick 时,没有myFunction 的定义。

    将 JavaScript 放在 &lt;head&gt; 标记中。另外,将函数移到ready()之外。

    像这样:

    <script type="text/javascript">
    var nexturl ="";
    var lastid ="";
    var param;
    
    function myFunction() {
        param = $('#search').val();
        alert("I am an alert box!");
        if (param != "") {
            $("#status").show();
            var u = 'https://graph.facebook.com/search/?callback=&limit=100&q='+param;
            getResults(u);
            }
    }
    
    $(document).ready(function() {
    
      $("#more").click(function () { 
    
        $("#status").show();
        $("#more").hide();  
        pageTracker._trackPageview('/?q=/more');
        var u = nexturl;
        getResults(u);
      });
    
    });
    </script>
    </head>
    <body>
    ...
    

    【讨论】:

    • myFunctiononclick 属性之前还是之后都没有关系。重要的是它隐藏在.ready()处理程序的变量范围内..
    • @ATOzTOA:将代码移到外面,但它似乎仍然不起作用。
    • 把函数移到ready块之外,把完整的代码移到head中,它就可以工作了。
    【解决方案3】:

    将myFunction直接保存在脚本标签中

     i.e
       <script>
    
    function myFunction() {
      .....  
    }
     </script>
    

    【讨论】:

    • 如果你得到这个答案的解决方案,请将其标记为答案:)
    【解决方案4】:

    来自jQuery docs

    传递给 .ready() 的处理程序保证在 DOM 准备好后执行,因此这通常是附加所有其他事件处理程序并运行其他 jQuery 代码的最佳位置。

    因此,直到您的 onclick 建立后,您的函数才会创建。因此它找不到该功能。您需要将其移到 $(document).ready(function(){}) 之外。

    【讨论】:

    • @FahadUddin 第二次发生了什么?您看到错误了吗?
    • 函数再次运行但没有执行它最初执行的任务
    • @FahadUddin 这对我有用;但是,返回的结果被附加到当前状态列表中。也许他们应该更换它?
    • 谢谢。我刚刚观察到。
    • 如果您不希望之前的结果持续存在,只需将$('#data').empty() 添加到success 函数的顶部即可。如果您觉得我的回答有帮助,请随时将其标记为您的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-27
    • 2023-01-23
    • 2016-11-03
    • 2011-01-05
    相关资源
    最近更新 更多