2012-06-22 55 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