Обычно это происходит потому, что вы связываете обработчик событий в другом обработчике событий. Например, если вы связывали обработчик события pagechange
внутри обработчика события pageshow
.
Также, если вы хотите привязать события страницы к определенной странице, вы можете просто привязать элемент data-role="page"
:
$(document).delegate('#my-page-id', 'pageshow', function () {
//now `this` refers to the `#my-page-id` element
});
Обновление
Я только что видел ваш обновленный ответ с дополнительным кодом, и ваша проблема заключается в в том, что вы связываете обработчик событий внутри другого обработчика событий. По сути, каждый раз, когда запускается событие pagechange
, новый обработчик события привязывается к элементу #name
.
Попробуйте это:
$(document).delegate('#name', 'keypress', function () {
if (e.keyCode == 13) {
var code = this.value;
$.ajax({
url: '/Consulta/ObterDadosPulseira',
data: $(this).serialize(),
success: function (data) {
$('#info').css('visibility', 'visible');
var info = $('#info')[0];
$('#info [id=gridCod]').html(data[0].cod);
$('#info [id=gridName]').html(data[0].nome);
},
complete: function () { },
error: function () { alert('error!'); }
});
this.value = '';
}
}).bind('pagechange', function () {
$('#info').css('visibility', 'hidden');
$('#name').focus();
});
При этом используется делегирование события для привязки обработчика события к элементу #name
, таким образом, обработчик события будет привязан один раз за все время.
Документы для .delegate()
: http://api.jquery.com/delegate