jQuery Mobile 绑定(bind)事件

标签 jquery jquery-mobile asp.net-mvc-4

我在使用 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/

相关文章:

jquery - 使用 CSS 的 iTunes 样式布局

jquery-mobile - knockout 刷新 html 中的 observableArray

c# - 两套 Controller

jQuery $(document).ready 和 ASP.NET MVC Partial

javascript - jQuery函数计算错误

javascript - 如何将点击事件添加到 iframe 的动态元素?

javascript - Jquery mobile - 为什么点击按钮时会出现ajax调用?

html - Jquery 从 sqlite 数据库获取值,无法更新值

c# - 在单个查询中将数据插入多个表

c# - 找到与名为 'Account' 的 Controller 匹配的多个类型。 MVC 4 & 使用 RouteConfig.CS