【问题标题】:Why my element always return the same value in js?为什么我的元素总是在 js 中返回相同的值?
【发布时间】:2011-05-07 02:58:37
【问题描述】:

代码如下:

 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,然后,我将它绑定到一个click事件。但最后,我的结果是所有点击事件都输出相同的结果....我做错了吗?谢谢。

【问题讨论】:

  • 真的需要一一绑定点击吗?你能用一些选择器吗?
  • tmpItem 是您自己的自定义对象,而 toHTMLElement 是您自己的自定义方法?如果是这样,您可以发布吗?
  • 是的,我需要一个一个设置。

标签: javascript jquery events event-handling


【解决方案1】:

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

希望这会有所帮助。干杯。

【讨论】:

  • 你是对的,因为只有在 for 完成后才会触发事件。
  • 还有一个问题...如果我有两个元素,例如,当 $("#edit_"+tmpItem.m_sId) 单击时,需要更改 $("#textarea_" +tmpItem.m_sId),但是我不能使用“this”关键字,我该怎么办?谢谢。
猜你喜欢
  • 2020-04-06
  • 1970-01-01
  • 2013-09-20
  • 1970-01-01
  • 2014-05-18
  • 2018-09-24
  • 1970-01-01
  • 2017-09-21
  • 1970-01-01
相关资源
最近更新 更多