gpt4 book ai didi

jQuery Mobile 绑定(bind)事件

转载 作者:行者123 更新时间:2023-12-03 23:01:49 25 4
gpt4 key购买 nike

我在使用 jquery mobile 时遇到了一些问题。我的页面总是被调用此函数运行。

$(document).bind('pagechange', function () { 
// peforms ajax operations
})

问题是,每次查看我的页面时,都会增加调用 ajax 的次数...示例:如果页面被查看 5 次,下次将执行相同的 ajax 请求 6 次。

我正在使用 asp.Net MVC 4。

Multiple ajax requests

完整代码:

@{
//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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com