Почему мой элемент всегда возвращает одно и то же значение в js? - PullRequest
0 голосов
/ 07 мая 2011

Вот код:

 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 для генерации идентификатора, а затем я связываю его с событием click. Но, наконец, мой результат - все события щелчка выводят один и тот же результат .... что я сделал не так? Спасибо.

1 Ответ

2 голосов
/ 07 мая 2011

Это из-за clousres / переменная область видимости, ваш tmpItem.m_sId var получит только свое последнее значение. Но если вы делаете:

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

вы обязательно получите другие результаты.

РЕДАКТИРОВАТЬ На всякий случай, если вам нужно получить доступ к вашему tmpItem внутри события click, вы можете использовать .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);
    });                          
 }

Надеюсь, это поможет. Приветствия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...