2012-06-22 75 views
0

我想在我的構造函數SmartButton中運行一個名爲makeHighlight的函數。 makeHighlight應該在我點擊SmartButton對象(一個圖像元素)時運行,這就是爲什麼我將屬性'onclick'設置爲makeHighlight的原因。我無法讓它工作,它可能根本無法運行,或者在頁面加載時立即運行。構造函數中的Javascript函數不工作onclick

function SmartButton(buttonId, defaultImage, highlightImage, helpMsg) { 
    var newLink = document.createElement('a'); 
     newLink.setAttribute('href', '#'); 

    var newImg = document.createElement('img'); 
     newImg.setAttribute('src', defaultImage); 
     newImg.setAttribute('id', buttonId); 
     newImg.setAttribute('onclick', "makeHighlight()"); 

    document.body.appendChild(newLink); 
    newLink.appendChild(newImg); 

    this.buttonId = buttonId; 
    this.defaultImage = defaultImage; 
    this.highlightImage = highlightImage; 
    this.helpMsg = helpMsg; 

    function makeHighlight() { 
     newImg.setAttribute('src', highlightImage); 
     console.log(this); 
    } 

} 

button1 = new SmartButton('button1', 'button1off.jpg', 'button1on.jpg', 'sup'); 
+0

@jcolebrand它確實因爲該事件的不,鼓泡。如果他指定了'href',那麼它會將他帶到另一個頁面,但JavaScript仍然會啓動(儘管他不會明顯看到效果:))。 – freakish

回答

2

您在SmartButton函數的範圍內定義了makeHighlight。因此點擊時newImg沒有看到它。試試這個代碼(內部SmartButton):

function makeHighlight() { 
    newImg.setAttribute('src', highlightImage); 
    console.log(this); 
} 
newImg.onclick = makeHighlight; 

(注意缺少的最後一行括號)並刪除這一行:

newImg.setAttribute('onclick', "makeHighlight()"); 
+0

哇,工作。是否因爲我在定義函數之前將onclick屬性設置爲函數? – yeenow123

+0

@ yeenow123不,這是因爲'makeHighlight' **不是全局函數。當你設置屬性(就像你做的那樣),JavaScript在全局範圍內尋找一個函數。你需要學習很多JavaScript,年輕的遊戲! :) – freakish