3

我使用 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

4 回答 4

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');
  }
});
于 2012-11-10T18:54:09.583 回答
2

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

$('#item').append($('<a>', {
    'class':    'savings_link',
    href:       '#',
    click:      function(e) {
        console.log("SUccess");
        console.log(data);
    }
}});
于 2012-11-10T19:00:50.317 回答
1

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

 window.showSavingsEasterEgg = function(data){
    console.log("SUccess");
    console.log(data);
  }
于 2012-11-10T18:55:36.690 回答
0

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

干杯

于 2012-11-10T18:55:24.880 回答