为什么我的元素总是在js中返回相同的值?

时间:2011-05-07 02:58:38

标签: javascript jquery events event-handling

以下是代码:

 for(var i = 0; i<aLotOfItems.length; i++){ 
    var tmpItem  =  aLotOfItems[i]; 

    //this will generate a <a> for me to handle the event
    tmpItem.toHTMLElement().prependTo($("#main"));

    //bind the click event
    $("#edit_"+tmpItem.m_sId).bind('click', function(){ 
        alert(tmpItem.m_sId);
    });                          
 }

首先,我有一个aLotOfItems数组,然后我一个接一个地将它传递给tmpItem对象。和这个对象一样,有一些htmlContent,我把它拿出来,比之前,主要的,toHTMLElement还会生成一个使用edit_ + m_sId生成id的标签,然后,我将它绑定到click事件。但最后,我的结果是所有点击事件输出相同的结果.... wt我做错了吗?谢谢。

1 个答案:

答案 0 :(得分:2)

这是因为clousres / variable范围,你的tmpItem.m_sId var只会得到它的最后一个值。但如果你这样做:

$("#edit_"+tmpItem.m_sId).bind('click', function(){ 
    alert($(this).attr("id"));
});                          

你肯定会得到不同的结果。

编辑如果您需要在点击事件中访问您的tmpItem,可以使用.data

 for(var i = 0; i<aLotOfItems.length; i++){ 
    var tmpItem  =  aLotOfItems[i]; 

    //this will generate a <a> for me to handle the event
    tmpItem.toHTMLElement().prependTo($("#main"));

    //bind the click event
    $("#edit_"+tmpItem.m_sId).data("tmpItem", tmpItem).bind('click', function(){ 
        var tmpItem = $(this).data("tmpItem");
        alert(tmpItem.m_sId);
    });                          
 }

希望这会有所帮助。欢呼声。