.click()来自jQuery中附加按钮的对象属性

时间:2014-07-13 09:21:08

标签: javascript jquery photoshop

我从一个对象制作几个按钮并将它们附加到正文中唯一的div:#main,除了实际的点击功能外,一切正常:我似乎无法使按钮警告不同属性。

这是我的目标:

var BrushDesc = function (n, i, t) {
    this.presetName = n;
    this.elemId = i;
    this.preset = t;
};
var brush = {};
brush.circ = new BrushDesc("circle", "circle", "basic circle");
brush.rect = new BrushDesc("rectangle", "rect", "19-2");
brush.softy = new BrushDesc("round soft", "softy", "softy");
brush.rake = new BrushDesc("|||", "rake", "21-3");

这是我第一次尝试添加按钮,但这始终会警告对象的最后.preset属性:

for (var i in brush) {
    $('<button id="'+brush[i].elemId+'">'+brush[i].presetName+'</button>')
    .appendTo("#main")
    .click(function() {alert(brush[i].preset)}); 
}

所以我认为&#39;好吧:(&#39;。然后我用不同的方式制作它似乎有效,但同时这看起来非常错误(主要是因为这取决于.elemId和{ {1}}具有相同的名称:

brush.property

任何人都可以做对吗?

编辑:感谢您指出Closures线程(尚未使用它们)Felix,但我不确定我是否理解如何将其应用于我的对象

for (var i in brush) {
    $('<button id="'+brush[i].elemId+'" class="main">'+brush[i].presetName+'</button>')
    .appendTo("#main")
}

$(".main").click(function() {
    var buttonId = $(this).attr("id");
    for (var i in brush) {
        if (brush[i].elemId == buttonId) alert(brush[i].preset)
    }
});

edit2 实际上我的一位朋友建议使用Immediately-Invoked Function Expression而不是关闭,它运作得很好

var tps = [];
function createTps(i) {return function() {alert(br[i].preset)}} //doh
for (i = 0; i<5; i++) {tps[i] = createTps(i)} //but I should have keys here, not numbers?

var j = 0;
for (var i in br) {
    $('<button id="' + br[i].elemId + '" class="main">' + br[i].presetName + '</button>')
    .appendTo("#main")
    .click(function() {tps[j](); j++}); //yeah, sure
}

0 个答案:

没有答案