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

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

最佳答案

这是因为 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);
    });                          
 }

希望这有帮助。干杯。

关于javascript - 为什么我的元素在js中总是返回相同的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5918839/

相关文章:

javascript - 如何在 jQuery 中加载页面 html 和内容(例如图像)?

html - 帮助将普通导航栏转换为下拉导航栏

javascript - Jquery FadeIn FadeOut不断重复

node.js - 捕捉 Ctrl-C 在 Node 中如何工作?

events - 对 F# 中的事件使用react时从列表中获取下一个值

c# - 如何在 Windows 窗体应用程序中使用多线程来更新进度条?

javascript - 如何防止用户在文本框中粘贴文本?

javascript - 两行 D3.js 折线图,一条线从不同位置开始

javascript - 这段 jquery 代码是如何工作的?

javascript - 根据属性在Openlayers中搜索wms图层,如果找到就放大