2012-12-11 90 views
0
zoom: function (element, scale){.....}, 
init: function() { 
    $("#book div img").live('dblclick', function() { 
     ... 
     $("#slider").slider({ 
     ... 
      slide: function(event, ui) { 
      //call function here 
      zoom (element,ui.value); 
      } 
     }); 
    }); 
}, 

有兩個函數,縮放和主函數。主函數調用zoom函數執行工作,但由於它不在同一級別,所以瀏覽器返回未定義函數'zoom'的錯誤。如何解決這個問題(可以調用幻燈片放大功能)?jQuery中的函數undefined/javascript

+0

你有沒有嘗試在var中保存'this'並調用'this.zoom'? – jbabey

+0

抱歉,將此保存在var中意味着什麼? – user782104

+1

這增加了:'var self = this;'在'init:function(){'然後使用'self.zoom()'之後''。看起來像從這裏的範圍問題。 –

回答

2

在函數的最外層範圍中存儲對this對象的引用。然後調用this.zoom()你的回調中:

zoom: function (element, scale){.....}, 
init: function() { 
    // store a reference to the object these functions are being added to 
    var that = this; 

    $("#book div img").live('dblclick', function() { 
     ... 
     $("#slider").slider({ 
     ... 
      slide: function(event, ui) { 
      // use the var you made above to call zoom 
      that.zoom (element,ui.value); 
      } 
     }); 
    }); 
}, 

簡單的例子:http://jsfiddle.net/u5ZL3/

0

無恥摘自:How do I declare a namespace in JavaScript?

//Public Method 
skillet.fry = function() { 
    var oliveOil; 

    addItem("\t\n Butter \n\t"); 
    addItem(oliveOil); 
    console.log("Frying " + skillet.ingredient); 
}; 

//Private Method 
function addItem(item) { 
    if (item !== undefined) { 
     console.log("Adding " + $.trim(item)); 
    } 
} 
+0

不完全相關,因爲海報正在使用對象字面模式,並且它不能解決帖子中的問題,但無論如何好信息... – jbabey

+0

真的,謝謝指出。 – 2012-12-11 02:49:10

0

如果你的類叫做鮑勃,你可以調用函數這樣

Bob.zoom (element,ui.value); 

另一種解決方案wou ld是使用「this」,它比調用類名有一些優點,我相信但需要更多的代碼。