2012-11-10 80 views
2

我使用javascript设置了一个锚点标记,因此onclick,我调用一个函数showSavingsEasterEgg并为其传递一个值。我得到的问题是,我没有引用我的正常功能:ReferenceError:使用onclick时未定义函数

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

btw'ReferenceError:define is not defined' –

回答

7

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'); 
    } 
}); 
+0

你知道define()是什么吗? –

+0

@ eicto不,但这不是问题:“showSavingsEasterEgg没有定义”。 –

+0

只是不知道,谢谢 –

0

你应该知道和了解什么是在任何编程语言中的"scope"定义。请将名为"showSavingsEasterEgg"的函数放在父函数的旁边,它将像魅力一样工作。这是因为你将它定义为父函数的私有成员。

干杯

0

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

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

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

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

我想使用onClick,因为我有几个具有相同ID的锚标记,如果我用事件侦听器单击其中一个,我的函数会被多次调用。 – Huy

+0

http://api.jquery.com/on/签出关于“*活动委托*”的部分 – jAndy

相关问题