2010-08-22 205 views
2

這種東西卡住了,這就是爲什麼需要幫助。我正在使用HTML5和JavaScript在圖像上插入文本,並使用文本創建新圖像。如果我手動添加文本,一切都很好,但如果我試圖將文本作爲值傳遞給函數,則不會發生。這裏的下面JavaScript,將值傳遞給函數

function draw_text(topt,bott){ 
    var canvas = document.getElementById("e"); 
    var context = canvas.getContext("2d"); 
    var img = new Image(); 
    img.src = "testimage.jpg"; 
    img.onload = function() 
    { 
    context.drawImage(img, 0, 0); 
    draw_text(); 
    }; 
    var toptext = this.topt; 
    var bottomtext = this.bott; 
    context.font = "12px Arial"; 
    context.fillStyle = "white"; 
    context.strokeStyle = 'black'; 
    context.fillText(toptext, (img.width-context.measureText(toptext).width)/2, 40); 
    context.strokeText(toptext, (img.width-context.measureText(toptext).width)/2, 40); 
    context.fillText(bottomtext, (img.width-context.measureText(bottomtext).width)/2, 350); 
    }; 

功能代碼,我被

draw_text('Text 1','Text 2'); 

調用此函數,但我要麼在畫布上是完全不可見或者它帶有文本「未定義」。我究竟做錯了什麼?順便說一句,如果它是重要的,我正在codeigniter視圖文件中執行此代碼。

回答

3

您沒有正確使用'this'。

替換:

var toptext = this.topt; 
var bottomtext = this.bott; 

有了:

var toptext = topt; 
var bottomtext = bott; 

***另外,我只注意到你有一個遞歸調用 「draw_text()」 不帶參數的draw_text的定義,這也是一個問題。

+0

其實這是我第一次嘗試的方式。沒有工作!兩種方式我都得到相同的結果。但是,如果我手動爲topt和bott賦值,並像函數draw_text()那樣對函數進行編碼,它就會起作用。 – user427357 2010-08-22 00:36:30

+0

好吧,使用'這'是你絕對不會工作的方式。如果通過「draw_text('asd','asd')」而不是「draw_text(somevar,somevar2)」來調用函數,那麼您傳入的兩個變量之一就是空或未定義的。 – jdc0589 2010-08-22 00:45:43

+0

另外,檢查編輯我原來的答案 – jdc0589 2010-08-22 00:47:46