2012-11-10 110 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

相關問題