9

我有一个带有 jquery mobile 和骨干网的小型 phonegap 应用程序。我试图通过手动调用 .popup() 方法向用户显示弹出窗口。

在 iOS 上一切正常,但在 android 上我遇到了奇怪的问题:弹出窗口显示了一会儿然后消失了。

这里是实际代码:

var PostView = Backbone.View.extend({
  events: {
    'touchend .add-comment-button': 'addComment'
  },
  addComment: function() {

    this.$(".comment-popup").popup('open', { history: false });

    return false; // Stop bubbling.
  }
});

我正在使用 history: false 因为这个弹出窗口实际上是子页面的一部分。代码看起来很简单,我只是不明白为什么它会消失,为什么这只发生在安卓设备上。

谢谢,对不起我的英语不好。

4

7 回答 7

4

我花了几个小时试图解决这个问题。

最后,我最终做了以下两件事,似乎解决了这个问题。

1 - 使用未压缩的 jqm 文件。即jquery.mobile.1.2.0.js

2 - 我使用“tap”选项以编程方式触发弹出窗口 - 一旦更改为“click”选项,它就起作用了。

$('.option').live('click', function() {
    $('#popup-div').popup('open');
}); 
于 2013-01-08T17:24:58.620 回答
3

我花了几个小时试图解决这个问题。

最后,我最终做了以下两件事,似乎解决了这个问题。

此代码段可能会对您有所帮助->

$('#testBtn').on('tap',function(e){
   console.log("button clicked");
   e.preventDefault();
   $('#testPOPUP').popup("open");
});

请注意我用过e.perventDefault().

于 2014-03-06T09:59:08.243 回答
1

我不想将我的 .tap() 事件更改为 click 事件,而且我没有可以使用 preventDefault() 的情况,所以我只是在 popup('open') 行中添加了一个超时。我在 jqm 中的 hoverdelay 设置为 150,所以为了安全起见,我将此超时设置为 600。工作正常,不会让用户感到呆滞。

于 2013-04-18T01:20:29.353 回答
1

“修复”它的一种方法是data-history="false"在弹出 div 上进行设置

另请参阅此问题

带有 history=false 自动关闭的 JQuery Mobile 弹出窗口

于 2014-05-08T00:21:33.477 回答
0

尝试在 android 2.3 设备(在本机浏览器和 firefox 中)上使用 popup('open') 时,我遇到了完全相同的问题,它在其他设备上的浏览器上运行良好。我还使用主干事件管理来打开我的弹出窗口(使用点击事件并且没有弹出的附加选项)。

我为“纠正”问题所做的事情是,我删除了该事件的主干事件管理,并在渲染函数中添加了一个侦听器。在您的情况下,这看起来像这样:

    events: {
       // 'touchend .add-comment-button': 'addComment'
    },
    render: function() {
            $(this.el).html(this.template(this.model));
            $(this.el).find('.add-comment-button').tap(function(el){
                this.addComment(el);
                return false;
            }.bind(this));
    }

我不知道问题出在哪里(肯定是骨干网和 jquery mobile 之间存在一些不兼容)以及为什么我们只在 android 上看到它,但目前使用这种解决方法,我的应用程序似乎在任何设备上都可以正常工作。

编辑:哎呀,事实证明,在我的情况下,问题是我错过了“return false;” 在处理事件的函数中。现在我添加了它,它可以与主干事件管理正常工作。可悲的是,这并不能解释为什么你有这个问题以及为什么我只在 android 上看到它。

于 2012-10-12T16:17:17.437 回答
0

如果它可以帮助任何人,我在使用 Bing Maps 时遇到了同样的问题Microsoft.Maps.Events.addHandler(pin, 'click', callback)

不是特别好,但我存储了一个 IDpushpin._id并执行了以下操作:

$("#page").on('vclick', function (event) {
    if (event.target.parentElement.className === "MapPushpinBase") {
        $("#stopPopup").popup('open');
    }
});
于 2013-02-26T17:14:59.027 回答
0

一种蛮力选项是检查弹出窗口是否被隐藏并重新打开。

在一个循环中,因为弹出窗口隐藏的确切时间似乎是不同的。

var hidden = $('#' + id + '-popup') .hasClass ('ui-popup-hidden')
if (hidden) $('#' + id) .popup ('open')

一个工作示例:http: //jsfiddle.net/ArtemGr/hgbdv9s7/

另一种选择可能是绑定到popupafterclose

var reopener = function() {$('#' + id) .popup ('open')}
$('#' + id) .on ('popupafterclose', reopener)
$('#' + id) .popup ('open')

喜欢这里:http: //jsfiddle.net/ArtemGr/gmpczrdm/

但由于某种原因,popupafterclose绑定在 iPhone 4 上的一半时间都无法触发。

于 2015-01-02T10:35:00.653 回答