По какой-то причине независимо от того, номер страницы заканчивается тем, что является последним значением в цикле для loopCounter. Теперь я бы понял, что если бы я напрямую использовал loopCounter в самом закрытии, но я не знаю. Как видно из приведенного ниже кода, я создаю новую переменную в закрытии, чтобы принять текущее значение loopCounter.Возможный доступ к модифицированной проблеме закрытия ... Как побить?
Единственное, что я могу представить (Предполагается, что javascript рассматривает все как ссылочный тип), что pageNumber ссылается на loopCounter, поэтому независимо от того, сколько раз я создаю новый номер страницы, он всегда указывает на объект loopCounter. Таким образом, любое значение loopCounter в конечном итоге будет значением, на которое указывает любой номер страницы.
Как заставить его не указывать на счётчик цикла, но создать новый PageNumber на одну итерацию, которая содержит текущее значение счётчик цикла?
for (var loopCounter = result.StartingPoint; loopCounter <= result.HighestPageCount; loopCounter++)
{
...
var newDiv = document.createElement('div');
...
//trying to remove the reference to loopCounter
var pageNumber = loopCounter;
newDiv.onclick =
function(event)
{ //Right here ---V
getResultUsingUrl(result.PagerPreLink + "&pageNumber=" + pageNumber);
};
...
}
РЕШЕНИЕ
Благодаря паре ответов ниже:
function createClickMethod(loopCounter, link)
{
var pageNumber = loopCounter;
return function(event) { getResultUsingUrl(link + "&pageNumber=" + pageNumber); };
}
и я могу назвать как:
newDiv.onclick = createClickMethod(loopCounter, result.PagerPreLink);
Или, если я хочу использовать JQuery .. ниже:
jQuery(newDiv).click
(
createClickMethod(loopCounter, result.PagerPreLink)
);
Что такое result.StartingPoint? –
Eh a объект, возвращенный из асинхронного вызова метода. –