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

Why my element always return the same value in js?

本文关键字:返回 js 元素 我的 为什么      更新时间:2023-09-26

这是代码:

 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,我把它拿出来,比,前缀到main,toHTMLElement也会生成一个标签,它使用edit_+m_sId来生成id,然后,我把它绑定到一个点击事件。但最后,我的结果是所有点击事件都输出相同的结果......我做错了吗?谢谢。

这是因为 clousres/变量作用域,您的 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);
    });                          
 }

希望这有帮助。干杯。