【问题标题】:pageChange doesn't remove old eventspageChange 不会删除旧事件
【发布时间】:2012-12-16 23:59:42
【问题描述】:

我在使用 jQuery mobile 时遇到了很多问题,我真的很想开枪打死自己。

我有一个带有此代码的页面:

$(document).on('pageinit ',function(){
$("#phone_number").on("blur", function (event, ui) {


    $.mobile.changePage("<?php echo base_url(); ?>mobile/products_by_phone",  {
     type: "POST",
     data: {phone :  $('#phone_number').val() },
    transition: "flip"} );

});
});

现在页面具有有效的 html 和 jQuery mobile 标记,其中包含以下代码:

$(document).on('pageinit ',function(){
 alert();
 });

现在,当我更改页面时它可以工作,但是当我再次调用 blur 事件时,页面更改了两次,然后我再做 4 次,然后是 8 次,等等。

并且按下浏览器的后退按钮有效,但是当我尝试向前按下时没有任何反应。

注意事项:

  • 我认为这可能与模糊有关,并且每次 changePage 发生模糊触发时,我尝试添加一个按钮并绑定到单击,但同样的事情发生了
  • 我认为可能是我绑定到document 的事实导致它,所以我尝试绑定到页面 id 但根本不起作用(没有任何事件发生,因为没有绑定事件),然后我尝试触发一个创建事件,但也没有绑定事件

为什么会这样?

【问题讨论】:

    标签: jquery events jquery-mobile mobile


    【解决方案1】:

    你所要做的就是添加你想要绑定 init 事件的页面...假设你想要这个绑定一次,你这样做,你只需要更具体。

    例子:

    $(document).on('pageinit', '#page1', function(e){...});
    

    将 #page1 替换为您的页面 ID。

    【讨论】:

      【解决方案2】:

      我不熟悉 jQuery mobile,但我假设 changePage() 函数使用 AJAX 调用加载新页面内容。如果是这种情况,那么现有的事件处理程序将保留,您每次只需添加更多的事件处理程序。

      尝试使用.off() 函数在(重新)绑定之前删除事件处理程序。

      【讨论】:

        【解决方案3】:

        这是一个常见的 jQuery 移动问题。这是因为多个事件绑定到同一个元素。每次返回上一页时,都会再次绑定相同的事件。

        这个问题有两种解决方案。

        在将事件绑定到某个元素之前,请检查同一事件是否尚未绑定。

        示例:

        $('.menu-browse:Event(!' + touchEvent + ')').each(function(){
            $('.menu-browse').bind(touchEvent, function(e) {
        
            });
        });
        

        您将在此处找到事件过滤器的完整实现:​​http://www.codenothing.com/archives/2009/event-filter/

        或者:

        每次绑定事件时,先解除绑定。

        示例:

        $(document).unbind();
        $(document).bind('pageinit', function(e) {
        
        });
        

        或:

        $(document).die();
        $(document).live('pageinit', function(e) {
        
        });
        

        或者在你的情况下:

        $(document).off(); 
        $(document).on('pageinit',function(){
            alert();
        });
        

        遗憾的是,对于这个问题没有万无一失的解决方案。

        【讨论】:

        • 嗯,第一个是给我Syntax error, unrecognized expression: unsupported pseudo: Event 和 off 和 die 都不起作用,同样的事情正在发生,这仍然不能回答为什么前进按钮不起作用。如果它在新页面中很重要,我的事件也不会被绑定......
        猜你喜欢
        • 2021-12-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-08
        • 1970-01-01
        相关资源
        最近更新 更多