我在使用 jquery mobile 时遇到了一些问题。我的页面总是被调用此函数运行。
$(document).bind('pagechange', function () {
// peforms ajax operations
})
问题是,每次查看我的页面时,都会增加调用 ajax 的次数...示例:如果页面被查看 5 次,下次将执行相同的 ajax 请求 6 次。
我正在使用 asp.Net MVC 4。
完整代码:
@{
//ViewBag.Title = "Consulta";
Layout = "~/Views/Shared/_LayoutMenu.cshtml";
}
<div class="ui-body ui-body-b" id="test">
(...) some html code (...)
</div>
<script>
$(document).bind('pagechange', function () {
$('#info').css('visibility', 'hidden');
$('#name').keypress(function (e) {
if (e.keyCode == 13) {
var code = $(this)[0].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)[0].value = '';
}
});
$('#name').focus();
});
最佳答案
通常会发生这种情况,因为您正在将一个事件处理程序绑定(bind)到另一个事件处理程序中。例如,如果您在 pageshow
事件处理程序内绑定(bind) pagechange
事件处理程序。
此外,如果您想绑定(bind)到特定页面的页面事件,您只需绑定(bind)到 data-role="page"
元素即可:
$(document).delegate('#my-page-id', 'pageshow', function () {
//now `this` refers to the `#my-page-id` element
});
更新
我刚刚看到您使用额外代码更新的答案,您的问题是您正在另一个事件处理程序中绑定(bind)一个事件处理程序。基本上,每次触发 pagechange
事件时,都会将一个新的事件处理程序绑定(bind)到 #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();
});
这使用事件委托(delegate)将事件处理程序绑定(bind)到 #name
元素,这样事件处理程序将永远绑定(bind)一次。
.delegate()
的文档:http://api.jquery.com/delegate
关于jQuery Mobile 绑定(bind)事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9470297/