一个href click()和闭包

时间:2011-07-20 18:31:53

标签: jquery

var DAYBOOK = {
    22 : 'hmm',
    9 : 'waaaah'
};

function cnstr_submenu(){
    var elm = $('#test');
    for(var key in DAYBOOK){
        (function(key){
            elm.append('<a href="#">'+DAYBOOK[key]+'</a><br>').click(function(){
                alert(key);
            });
        })(key);
    }
};
cnstr_submenu();

http://jsfiddle.net/9AqVK/

为什么单击链接时会提醒DAYBOOK对象中的所有属性?

2 个答案:

答案 0 :(得分:5)

elm.append(...).click实际上会将click绑定到elmdiv)。因此,当点击链接时,链接不会做太多 - 而是执行div的点击处理程序,其中有一个函数绑定click两次。

如果您希望每个链接都提醒一个值,请将该功能绑定到链接:

elm.append( // append the following element
    // create a link with a click handler bound
    $('<a href="#">'+DAYBOOK[key]+'</a><br>').click(function(){
            alert(key);
    })
);

答案 1 :(得分:0)

Try this

var DAYBOOK = {
    22 : 'hmm',
    9 : 'waaaah'
};

function cnstr_submenu(){
    var elm = $('#test');
    for(var key in DAYBOOK){
        (function(key){
            elm.append('<a href="#">'+DAYBOOK[key]+'</a>').click(function(){
                alert(key);
            }).append("<br />");
        })(key);
    }
};
cnstr_submenu();