jQuery Mobile绑定事件

jquery jquery-mobile asp.net-mvc-4

5442 观看

1回复

400 作者的声誉

我对jquery mobile有点问题。总是我的页面被称为此功能运行。

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

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

我正在使用asp.Net MVC 4。

多个ajax请求

完整代码:

@{
    //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();                       
});

作者: Paulo Mendonça 的来源 发布者: 2012 年 2 月 27 日

回应 (1)


8

71625 作者的声誉

决定

通常这是因为您在另一个事件处理程序中绑定事件处理程序。例如,如果您在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

作者: Jasper 发布者: 27.02.2012 06:48
32x32