ReferenceError:使用onclick时未定义函数

时间:2012-11-10 18:52:51

标签: javascript jquery

我使用javascript设置了一个锚标记,以便onclick,我调用一个函数showSavingsEasterEgg并传递一个值。我得到的问题是我没有正确引用我的功能:

ReferenceError: showSavingsEasterEgg is not defined

我已经尝试将showSavingsEasterEgg函数移动到showData函数中,看它是否解决了范围问题,但它没有。

任何提示

define(["jquery", "go/util", "underscore", "jqueryui/slider"], function ($, util,_) {

  function showData(data) {
    $('#item').append('<a class="savings_link" href="#" onclick=\'showSavingsEasterEgg('+data[key]['saving']+')\'> Savings');
  }

  function showSavingsEasterEgg(data){
    console.log("SUccess");
    console.log(data);
  }

});

4 个答案:

答案 0 :(得分:8)

showSavingsEasterEgg的定义直接放在全局范围内。

在这里,找不到它。

你可以这样做:

window.showSavingsEasterEgg = function (data){
    console.log("SUccess");
    console.log(data);
};
define(["jquery", "go/util", "underscore", "jqueryui/slider"], function ($, util,_) {
  function showData(data) {
    $('#item').append('<a class="savings_link" href="#" onclick=\'showSavingsEasterEgg('+data[key]['saving']+')\'> Savings');
  }
});

答案 1 :(得分:2)

想知道为什么没有人提出迄今为止最明显,最方便和“最佳实践”的方法。你根本不应该使用内联事件处理,不要引人注目。

$('#item').append($('<a>', {
    'class':    'savings_link',
    href:       '#',
    click:      function(e) {
        console.log("SUccess");
        console.log(data);
    }
}});

答案 2 :(得分:1)

让showSavingsEasterEgg全局化。您只能从html代码中调用全局可访问的对象/引用。

 window.showSavingsEasterEgg = function(data){
    console.log("SUccess");
    console.log(data);
  }

答案 3 :(得分:0)

您应该了解并理解任何编程语言中"scope"的定义。请将名为"showSavingsEasterEgg"的函数移出父函数的一侧,它将像魅力一样工作。这是因为您将其定义为父函数的私有成员。

干杯