首页 > 解决方案 > JavaScript 'myFunction' 不是一个函数,尽管它是

问题描述

我有类似的东西

let myFunction;
$(document).ready(function() {
    myFunction = function(param) {
        // ...
    }
});

在我的 HTML 中,我有

<a href="javascript:void(0);" onclick="myFunction(1)">...</a>

现在它说Uncaught ReferenceError: myFunction is not defined

let myFunction;
$(document).ready(function() {
    myFunction = function(param) {
        console.log('running');
    }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<a href="javascript:void(0);" onclick="myFunction(1)">...</a>

好的,所以我尝试的是:

$(document).ready(function() {
    function myFunction(param) {
        // ...
    }
});

但又一次,Uncaught ReferenceError: myFunction is not defined。我真的不知道,我现在使用了第一段代码很长一段时间,突然之间,它不再起作用了(或者在我的上下文中,或者其他任何情况下)。对此的正确方法是什么?

我创建了一个 JSFiddle 以表明我尝试的方法确实不起作用(警报中的预期输出为 1 或 2,给出错误): https ://jsfiddle.net/kgdcwe4z/5/

标签: javascript

解决方案


最好只使用 Jquery,如下所示:

<a href="javascript:void(0);" data-id="1" id="test">...</a>

$(document).ready(function() {
    $("#test").on('click', function() {
       const id = $(this).attr('data-id');
       //doSomething considering the id as the param here
    });
});

另一个只有 Javascript 的解决方案是:

const myFunction = function(param) {
    // ...
}

<a href="javascript:void(0);" onClick="myFunction(1)">...</a>

使用您现有的代码,您可以通过闭包实现这样的目标:

$(document).ready(function() {
    func = function(param) {
  console.log('param => ', param)
  }
})(func);

更新答案链接:https ://jsfiddle.net/cjnp40e6/


推荐阅读