未捕获引用-myFunction()未定义

Uncaught Reference - myFunction() is undefined

本文关键字:未定义 -myFunction 引用      更新时间:2023-09-26

我在这里读了大约50个关于这个错误的主题,但看起来我没有找到解决问题的方法。

这是我正在使用的代码:

<script type="text/javascript">
var NAME,CATEGORY,NEED,PIMP;
    function myFunction(){
     NAME = document.getElementById("NAME").value; 
     CATEGORY = document.getElementById("CATEGORY").value;
     NEED = document.getElementById("NEED").value;
     PIMP = document.getElementById("PIMP").value;
     alert();
    }       
        (function() {
        $.ajax({
            type: "POST", 
            dataType: "json",
            data: {name:NAME, category:CATEGORY, need:NEED, pimp:PIMP},
            url: "send.php",
            success: function(result) {
            alert('Good job');
            }
        });
        }
    ); 
</script>
<div>
<br>
<a href="javascript:void(0);" class="myButton" onclick="myFunction()">BOOM!</a>
</div>

假设当我点击按钮时从多个表单中收集var,并通过邮件发送内容。。。但我在控制台中仍然有这个错误"myFunction is undefined"。

脚本的jQuery部分包含语法错误,因此整个脚本块(包括myFunction)将被丢弃。

修复语法错误。

function myFunction() {
  alert('call of myFunction')
  var NAME = document.getElementById("NAME").value;
  var CATEGORY = document.getElementById("CATEGORY").value;
  var NEED = document.getElementById("NEED").value;
  var PIMP = document.getElementById("PIMP").value;
}
/**
jQuery(function($) {
  type: "POST",//<--syntax-error
  dataType: "json",
  data: {
    name: NAME,
    category: CATEGORY,
    need: NEED,
    pimp: PIMP
  },
  url: "send.php",
  success: function(result) {
    alert('Good job');
  }
});
**/
<div>
  <br>
  <a href="javascript:void(0);" class="myButton" onclick="myFunction()">BOOM!</a>
</div>

这肯定是一个与有关的问题,您将代码放在哪里。我猜是在html的末尾,在html被渲染之后。

无论如何,如果您碰巧修复了代码仍然无法工作的问题,因为函数中的变量是本地的,在ajax调用中无法访问。

既然你在使用jQuery,我会这样做:

$('.myButton').on('click', function() {
  var NAME = document.getElementById("NAME").value; 
  var CATEGORY = document.getElementById("CATEGORY").value;
  var NEED = document.getElementById("NEED").value;
  var PIMP = document.getElementById("PIMP").value;
  $.post(your url, { name: name...}, function() { alert('Good job'); });
}

看起来您正试图将对象语法作为函数的主体,而不是对象内部。你可以做

var a = {
  foo: "foo",
  bar: "bar"
}

另一种选择是直接将其作为参数传递,正如我在下面所做的那样。

我相信你正在寻找的语法类似于

var NAME,CATEGORY,NEED,PIMP;
    function myFunction(){
     NAME = document.getElementById("NAME").value; 
     CATEGORY = document.getElementById("CATEGORY").value;
     NEED = document.getElementById("NEED").value;
     PIMP = document.getElementById("PIMP").value;
        alert();
    }       
        $(function() {
        $.ajax({
            type: "POST", 
            dataType: "json",
            data: {name:NAME, category:CATEGORY, need:NEED, pimp:PIMP},
            url: "send.php",
            success: function(result) {
            alert('Good job');
            }
        });
        }
    ); 

注意,我还将变量NAME、CATEGORY、NEED和PIMP设置为全局变量,因为您在myFunction()的范围内声明它们,并试图在该范围之外访问它们

myFunction放在哪里?如果你把这个函数放在DOMready函数中,那么把它去掉,立即放在script中:

<script>
function myFunction() {
  var NAME = document.getElementById("NAME").value;
  var CATEGORY = document.getElementById("CATEGORY").value;
  var NEED = document.getElementById("NEED").value;
  var PIMP = document.getElementById("PIMP").value;
}
</script>

我认为您的问题可能是脚本加载时与元素加载时相比。因此,它可能是未定义的,因为脚本尚未加载,但文档已经加载。您可以使用jquery 修复此问题并简化代码

$(document).ready(function(){
  $('.myButton').click(function() {
  var NAME = $(".NAME").val();
  var CATEGORY = $(".CATEGORY").val();
  var NEED = $(".NEED").val();
  var PIMP = $(".PIMP").val();
   jQuery.post('send.php',{'name': NAME,'category': CATEGORY, 'need': NEED,'pimp': PIMP},function(result) {alert('Good job');},"json");
});
});

不管什么时候加载,这都应该有效。$(document).ready();确保在调用函数之前加载文档,此时它应该能够根据css选择器找到您的按钮。你的帖子请求也有问题,但我相信我也解决了。最后一个问题是,最初您的post请求不在函数中,因此它是单独运行的,而不是在变量被声明为

之后立即运行

可能是您的函数没有在全局范围内定义,请尝试将其定义为window:的属性

window.myFunction = function(){ ... }