я использую следующийКак предотвратить функцию, связанную с событием клика при каждом повторе страницы?
jquery 1.11.1
jquery.mobile 1.4.3
cordova 2.9.0
iscroll 5
вот мой HTML:
<div data-role="page" id="listpageid">
<div data-role="header" data-position="fixed">
some radio buttons
</div>
<div id="wrapper">
<div data-role="content" id="scroller">
</div>
</div>
</div>
у меня есть вызов Ajax, которая получает кучу данных с сервера. я петля через результаты и добавить их в DIV с идентификатором = «скроллер»
$('#scroller').empty();
for (var i=0;i<resultsArr.length;i++)
{
htmlToAppend = "";
htmlToAppend = "<a id=" + i + " >" + resultsArr[i].field + "<br><br></a>";
contentForDisplay = contentForDisplay.concat(htmlToAppend);
}
$('#scroller').append(contentForDisplay);
$('#scroller a').click(function() {
alert("you clicked on " + this.id);
});
этот код выполняется всякий раз, когда Ajax вызов заполняет resultsArr
первый раз на странице отображается, и это выполняется это дает меня точно, что я хочу, прокручиваемый список кликаемых ссылок.
Если я оставлю страницу и вернусь назад, все будет работать неправильно.
ДИВ имени скроллер опорожняется и отображается содержимое resultsArr, но нажав на ссылку каждые результаты в 2 предупреждений вместо 1.
если я покинуть страницу и вернуться обратно в 3-й раз, нажав на ссылку дает 3 предупреждения вместо 1.
я попытался предотвращения этого кода
$('#scroller a').click(function() {
alert("you clicked on " + this.id);
});
от исполнения на всех, кроме первого отображения страницы, и это делает отображаемые ссылки unclickable на 2-й, 3-й и т.д. страница отображается.
я думал
$('#scroller').empty();
удалены/уничтожены содержимое страницы и будет включать в себя функцию, которая увольняют на событие щелчка.
очевидно его нет.
как разрешить перерисовку страницы, но только один раз присоединить функцию к событию клика?
EDIT: ни одно из ваших решений не работало. пока я не удалю iscroll. затем все ваши решения работали. так что ... есть ли у кого-нибудь какие-либо идеи о том, как iscroll накручивает это?
Кажется странным, вы опорожняете контейнер и вставляете новые элементы, а старый обработчик событий не должен работать над этими новыми элементами, поскольку он не делегирован. Вы должны добавить обработчик событий внутри некоторой функции, которая выполняется несколько раз. – adeneo
Вот еще jQuery'ish способ делать вещи -> ** http: //jsfiddle.net/u2ffL7mp/** – adeneo
Я добавлял обработчик событий в подпрограмму, которая выполнялась каждый раз, когда я перестраивал экран. однако после того, как я перешел на делегированное событие, проблема продолжалась - см. мой разговор с Озаном ниже. Я собираюсь попробовать ваше предложение дальше. – user1126515