我使用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);
}
});
答案 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"
的函数移出父函数的一侧,它将像魅力一样工作。这是因为您将其定义为父函数的私有成员。
干杯